kern: delete KWritableEvent, devirtualize KReadableEvent Signal/Clear

This commit is contained in:
Michael Scire 2021-09-17 15:31:25 -07:00 committed by SciresM
parent d80ad222cc
commit e6a6fe6f38
15 changed files with 81 additions and 149 deletions

View file

@ -20,19 +20,11 @@ namespace ams::kern {
void KEvent::Initialize() {
MESOSPHERE_ASSERT_THIS();
/* Increment reference count. */
/* Because reference count is one on creation, this will result */
/* in a reference count of two. Thus, when both readable and */
/* writable events are closed this object will be destroyed. */
this->Open();
/* Create our sub events. */
/* Create our readable event. */
KAutoObject::Create(std::addressof(m_readable_event));
KAutoObject::Create(std::addressof(m_writable_event));
/* Initialize our sub sessions. */
/* Initialize our readable event. */
m_readable_event.Initialize(this);
m_writable_event.Initialize(this);
/* Set our owner process. */
m_owner = GetCurrentProcessPointer();
@ -48,6 +40,22 @@ namespace ams::kern {
KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList>::Finalize();
}
Result KEvent::Signal() {
KScopedSchedulerLock sl;
R_SUCCEED_IF(m_readable_event_destroyed);
return m_readable_event.Signal();
}
Result KEvent::Clear() {
KScopedSchedulerLock sl;
R_SUCCEED_IF(m_readable_event_destroyed);
return m_readable_event.Clear();
}
void KEvent::PostDestroy(uintptr_t arg) {
/* Release the event count resource the owner process holds. */
KProcess *owner = reinterpret_cast<KProcess *>(arg);