summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/k_event.cpp14
-rw-r--r--src/core/hle/kernel/k_event.h2
-rw-r--r--src/core/hle/kernel/svc.cpp2
-rw-r--r--src/core/hle/service/kernel_helpers.cpp2
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
15KEvent::~KEvent() = default; 15KEvent::~KEvent() = default;
16 16
17void KEvent::Initialize(std::string&& name_) { 17void 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() {
47void KEvent::PostDestroy(uintptr_t arg) { 45void 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();