NVDRV: Fix clearing when destroying.
This commit is contained in:
		| @@ -24,12 +24,9 @@ namespace Service::Nvidia::Devices { | ||||
| nvhost_ctrl::nvhost_ctrl(Core::System& system_, EventInterface& events_interface_, | ||||
|                          NvCore::Container& core_) | ||||
|     : nvdevice{system_}, events_interface{events_interface_}, core{core_}, | ||||
|       syncpoint_manager{core_.GetSyncpointManager()} { | ||||
|     events_interface.RegisterForSignal(this); | ||||
| } | ||||
|       syncpoint_manager{core_.GetSyncpointManager()} {} | ||||
|  | ||||
| nvhost_ctrl::~nvhost_ctrl() { | ||||
|     events_interface.UnregisterForSignal(this); | ||||
|     for (auto& event : events) { | ||||
|         if (!event.registered) { | ||||
|             continue; | ||||
| @@ -77,8 +74,12 @@ NvResult nvhost_ctrl::Ioctl3(DeviceFD fd, Ioctl command, const std::vector<u8>& | ||||
|     return NvResult::NotImplemented; | ||||
| } | ||||
|  | ||||
| void nvhost_ctrl::OnOpen(DeviceFD fd) {} | ||||
| void nvhost_ctrl::OnClose(DeviceFD fd) {} | ||||
| void nvhost_ctrl::OnOpen(DeviceFD fd) { | ||||
|     events_interface.RegisterForSignal(this); | ||||
| } | ||||
| void nvhost_ctrl::OnClose(DeviceFD fd) { | ||||
|     events_interface.UnregisterForSignal(this); | ||||
| } | ||||
|  | ||||
| NvResult nvhost_ctrl::NvOsGetConfigU32(const std::vector<u8>& input, std::vector<u8>& output) { | ||||
|     IocGetConfigParams params{}; | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|  | ||||
| namespace Service::Nvidia { | ||||
|  | ||||
| EventInterface::EventInterface(Module& module_) : module{module_} {} | ||||
| EventInterface::EventInterface(Module& module_) : module{module_}, guard{}, on_signal{} {} | ||||
|  | ||||
| EventInterface::~EventInterface() = default; | ||||
|  | ||||
| @@ -40,10 +40,7 @@ void EventInterface::RegisterForSignal(Devices::nvhost_ctrl* device) { | ||||
|  | ||||
| void EventInterface::UnregisterForSignal(Devices::nvhost_ctrl* device) { | ||||
|     std::unique_lock<std::mutex> lk(guard); | ||||
|     auto it = std::find(on_signal.begin(), on_signal.end(), device); | ||||
|     if (it != on_signal.end()) { | ||||
|         on_signal.erase(it); | ||||
|     } | ||||
|     on_signal.remove(device); | ||||
| } | ||||
|  | ||||
| void EventInterface::Signal(u32 syncpoint_id, u32 value) { | ||||
|   | ||||
| @@ -110,9 +110,6 @@ private: | ||||
|     /// Mapping of file descriptors to the devices they reference. | ||||
|     FilesContainerType open_files; | ||||
|  | ||||
|     /// Mapping of device node names to their implementation. | ||||
|     std::unordered_map<std::string, std::shared_ptr<Devices::nvdevice>> devices; | ||||
|  | ||||
|     KernelHelpers::ServiceContext service_context; | ||||
|  | ||||
|     EventInterface events_interface; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user