os: implement waitable management.

This implements waitable management for Events (and
implements Events). It also refactors PM to use new
Event/Waitable semantics, and also adds STS_ASSERT
as a macro for asserting a boolean expression. The
rest of stratosphere has been refactored to use
STS_ASSERT whenever possible.
This commit is contained in:
Michael Scire authored and SciresM committed 2019-12-07 12:41:28 -08:00
1 parent e07011be32
commit 609a302e16
108 files changed
+2752 -1223

No files matched your search

@@ -21,8 +21,8 @@
namespace sts::pm::impl {
ProcessInfo::ProcessInfo(Handle h, u64 pid, ldr::PinId pin, const ncm::TitleLocation &l) : process_id(pid), pin_id(pin), loc(l), handle(h), state(ProcessState_Created), flags(0) {
/* ... */
ProcessInfo::ProcessInfo(Handle h, u64 pid, ldr::PinId pin, const ncm::TitleLocation &l) : process_id(pid), pin_id(pin), loc(l), handle(h), state(ProcessState_Created), flags(0), waitable_holder(h) {
this->waitable_holder.SetUserData(reinterpret_cast<uintptr_t>(this));
}
ProcessInfo::~ProcessInfo() {
@@ -39,6 +39,9 @@ namespace sts::pm::impl {
/* Close the process's handle. */
svcCloseHandle(this->handle);
this->handle = INVALID_HANDLE;
/* Unlink the process from its waitable manager. */
this->waitable_holder.UnlinkFromWaitableManager();
}
}