diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-06-05 22:25:22 -0700 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-06-06 02:57:04 -0700 |
commit | e5a59ef27c6a1fc66dfcbc63c84ad14dc73c54ae (patch) | |
tree | 82feb44406f4767d3c0bd401b016dc446ae06097 /src | |
parent | 1eee09f36458bbb98212e05cb549cc43a995f03b (diff) |
Service/sm: Use an actual semaphore for the notification semaphore
An Event was used way back then when we didn't have proper working
semaphores. Our Semaphore implementation is good enough now.
Diffstat (limited to 'src')
-rw-r--r-- | src/core/hle/service/sm/srv.cpp | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/core/hle/service/sm/srv.cpp b/src/core/hle/service/sm/srv.cpp index 9d7a83597..d6946c734 100644 --- a/src/core/hle/service/sm/srv.cpp +++ b/src/core/hle/service/sm/srv.cpp @@ -7,14 +7,16 @@ #include "common/common_types.h" #include "common/logging/log.h" #include "core/hle/kernel/client_session.h" -#include "core/hle/kernel/event.h" +#include "core/hle/kernel/semaphore.h" #include "core/hle/kernel/server_session.h" #include "core/hle/service/sm/srv.h" namespace Service { namespace SM { -static Kernel::SharedPtr<Kernel::Event> event_handle; +constexpr int MAX_PENDING_NOTIFICATIONS = 16; + +static Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore; /** * SRV::RegisterClient service function @@ -51,14 +53,13 @@ static void RegisterClient(Interface* self) { static void EnableNotification(Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - // TODO(bunnei): Change to a semaphore once these have been implemented - event_handle = Kernel::Event::Create(Kernel::ResetType::OneShot, "SRV:Event"); - event_handle->Clear(); + notification_semaphore = + Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap(); cmd_buff[0] = IPC::MakeHeader(0x2, 0x1, 0x2); // 0x20042 cmd_buff[1] = RESULT_SUCCESS.raw; // No error cmd_buff[2] = IPC::CopyHandleDesc(1); - cmd_buff[3] = Kernel::g_handle_table.Create(event_handle).MoveFrom(); + cmd_buff[3] = Kernel::g_handle_table.Create(notification_semaphore).MoveFrom(); LOG_WARNING(Service_SRV, "(STUBBED) called"); } @@ -177,11 +178,11 @@ const Interface::FunctionInfo FunctionTable[] = { SRV::SRV() { Register(FunctionTable); - event_handle = nullptr; + notification_semaphore = nullptr; } SRV::~SRV() { - event_handle = nullptr; + notification_semaphore = nullptr; } } // namespace SM |