From 3b0458a7a59ba262836d7876ac7a2e1a822e9a6a Mon Sep 17 00:00:00 2001 From: Chloe Marcec Date: Sat, 23 Jan 2021 22:02:14 +1100 Subject: nvdrv: Unregister already registered events --- src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp index fea3b7b9f..73cd5a889 100644 --- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp +++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp @@ -155,7 +155,14 @@ NvResult nvhost_ctrl::IocCtrlEventRegister(const std::vector& input, std::ve return NvResult::BadParameter; } if (events_interface.registered[event_id]) { - return NvResult::BadParameter; + const auto event_state = events_interface.status[event_id]; + if (event_state == EventState::Registered || event_state == EventState::Waiting || + event_state == EventState::Busy) { + LOG_WARNING(Service_NVDRV, "Event already registered! Unregistering previous event"); + events_interface.UnregisterEvent(event_id); + } else { + return NvResult::BadParameter; + } } events_interface.RegisterEvent(event_id); return NvResult::Success; -- cgit v1.2.3