diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/hle/kernel/k_event.cpp | 14 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_event.h | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/service/kernel_helpers.cpp | 2 |
4 files changed, 8 insertions, 12 deletions
diff --git a/src/core/hle/kernel/k_event.cpp b/src/core/hle/kernel/k_event.cpp index 0720efece..2e0e8de80 100644 --- a/src/core/hle/kernel/k_event.cpp +++ b/src/core/hle/kernel/k_event.cpp | |||
| @@ -14,7 +14,7 @@ KEvent::KEvent(KernelCore& kernel_) | |||
| 14 | 14 | ||
| 15 | KEvent::~KEvent() = default; | 15 | KEvent::~KEvent() = default; |
| 16 | 16 | ||
| 17 | void KEvent::Initialize(std::string&& name_) { | 17 | void KEvent::Initialize(std::string&& name_, KProcess* owner_) { |
| 18 | // Increment reference count. | 18 | // Increment reference count. |
| 19 | // Because reference count is one on creation, this will result | 19 | // Because reference count is one on creation, this will result |
| 20 | // in a reference count of two. Thus, when both readable and | 20 | // in a reference count of two. Thus, when both readable and |
| @@ -30,10 +30,8 @@ void KEvent::Initialize(std::string&& name_) { | |||
| 30 | writable_event.Initialize(this, name_ + ":Writable"); | 30 | writable_event.Initialize(this, name_ + ":Writable"); |
| 31 | 31 | ||
| 32 | // Set our owner process. | 32 | // Set our owner process. |
| 33 | owner = kernel.CurrentProcess(); | 33 | owner = owner_; |
| 34 | if (owner) { | 34 | owner->Open(); |
| 35 | owner->Open(); | ||
| 36 | } | ||
| 37 | 35 | ||
| 38 | // Mark initialized. | 36 | // Mark initialized. |
| 39 | name = std::move(name_); | 37 | name = std::move(name_); |
| @@ -47,10 +45,8 @@ void KEvent::Finalize() { | |||
| 47 | void KEvent::PostDestroy(uintptr_t arg) { | 45 | void KEvent::PostDestroy(uintptr_t arg) { |
| 48 | // Release the event count resource the owner process holds. | 46 | // Release the event count resource the owner process holds. |
| 49 | KProcess* owner = reinterpret_cast<KProcess*>(arg); | 47 | KProcess* owner = reinterpret_cast<KProcess*>(arg); |
| 50 | if (owner) { | 48 | owner->GetResourceLimit()->Release(LimitableResource::Events, 1); |
| 51 | owner->GetResourceLimit()->Release(LimitableResource::Events, 1); | 49 | owner->Close(); |
| 52 | owner->Close(); | ||
| 53 | } | ||
| 54 | } | 50 | } |
| 55 | 51 | ||
| 56 | } // namespace Kernel | 52 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h index 3d3ec99e2..de9732ddf 100644 --- a/src/core/hle/kernel/k_event.h +++ b/src/core/hle/kernel/k_event.h | |||
| @@ -22,7 +22,7 @@ public: | |||
| 22 | explicit KEvent(KernelCore& kernel_); | 22 | explicit KEvent(KernelCore& kernel_); |
| 23 | ~KEvent() override; | 23 | ~KEvent() override; |
| 24 | 24 | ||
| 25 | void Initialize(std::string&& name); | 25 | void Initialize(std::string&& name, KProcess* owner_); |
| 26 | 26 | ||
| 27 | void Finalize() override; | 27 | void Finalize() override; |
| 28 | 28 | ||
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 9836809f2..839171e85 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -2332,7 +2332,7 @@ static ResultCode CreateEvent(Core::System& system, Handle* out_write, Handle* o | |||
| 2332 | R_UNLESS(event != nullptr, ResultOutOfResource); | 2332 | R_UNLESS(event != nullptr, ResultOutOfResource); |
| 2333 | 2333 | ||
| 2334 | // Initialize the event. | 2334 | // Initialize the event. |
| 2335 | event->Initialize("CreateEvent"); | 2335 | event->Initialize("CreateEvent", kernel.CurrentProcess()); |
| 2336 | 2336 | ||
| 2337 | // Commit the thread reservation. | 2337 | // Commit the thread reservation. |
| 2338 | event_reservation.Commit(); | 2338 | event_reservation.Commit(); |
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp index 62f4cdfb2..d0c7bc0ce 100644 --- a/src/core/hle/service/kernel_helpers.cpp +++ b/src/core/hle/service/kernel_helpers.cpp | |||
| @@ -43,7 +43,7 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) { | |||
| 43 | } | 43 | } |
| 44 | 44 | ||
| 45 | // Initialize the event. | 45 | // Initialize the event. |
| 46 | event->Initialize(std::move(name)); | 46 | event->Initialize(std::move(name), process); |
| 47 | 47 | ||
| 48 | // Commit the thread reservation. | 48 | // Commit the thread reservation. |
| 49 | event_reservation.Commit(); | 49 | event_reservation.Commit(); |