summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/osd/modules/input/input_sdl.cpp8
-rw-r--r--src/osd/modules/input/input_sdlcommon.h10
2 files changed, 15 insertions, 3 deletions
diff --git a/src/osd/modules/input/input_sdl.cpp b/src/osd/modules/input/input_sdl.cpp
index 9ea26733f60..2c5b2e45a8c 100644
--- a/src/osd/modules/input/input_sdl.cpp
+++ b/src/osd/modules/input/input_sdl.cpp
@@ -435,6 +435,14 @@ public:
}
}
+ void exit() override
+ {
+ // unsubscribe for events
+ sdl_event_manager::instance().unsubscribe(this);
+
+ input_module_base::exit();
+ }
+
void before_poll(running_machine& machine) override
{
// Tell the event manager to process events and push them to the devices
diff --git a/src/osd/modules/input/input_sdlcommon.h b/src/osd/modules/input/input_sdlcommon.h
index 3650a313e9d..458b90be7ba 100644
--- a/src/osd/modules/input/input_sdlcommon.h
+++ b/src/osd/modules/input/input_sdlcommon.h
@@ -96,12 +96,16 @@ public:
std::lock_guard<std::mutex> scope_lock(m_lock);
// Loop over the entries and find ones that match our subscriber
- // remove those that match
- for (auto iter = m_subscription_index.begin(); iter != m_subscription_index.end(); iter++)
+ std::vector<typename std::unordered_multimap<int, TSubscriber*>::iterator> remove;
+ for (auto iter = m_subscription_index.begin(); iter != m_subscription_index.end(); ++iter)
{
if (iter->second == subscriber)
- m_subscription_index.erase(iter);
+ remove.push_back(iter);
}
+
+ // remove those that matched
+ for (int i = 0; i < remove.size(); i++)
+ m_subscription_index.erase(remove[i]);
}
virtual void process_events(running_machine &machine) = 0;