summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Shanks <bshanks@audiovox.com>2014-03-27 13:01:58 -0700
committerJustin Dickow <jjdickow@gmail.com>2014-04-02 16:03:15 -0400
commite7de43c27bacc1da01574ee0fad5a560264b29fa (patch)
tree503b8bae07780327c561161a6a6248611188e57d
parent2b8d4aa3d31b8d8c5b30ec19fe9284f566ca96cd (diff)
downloadsmartdevicelink-e7de43c27bacc1da01574ee0fad5a560264b29fa.tar.gz
event_dispatcher: Don't advance STL iterator already at end()
Advancing an STL vector iterator which is equal to end() is undefined. After erase(), observer_it was not being compared to end() before being incremented. Make sure the iterator gets compared to end() before incrementing again MSVC was throwing a runtime exception for this.
-rw-r--r--SDL_Core/src/components/application_manager/src/event_engine/event_dispatcher.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/SDL_Core/src/components/application_manager/src/event_engine/event_dispatcher.cc b/SDL_Core/src/components/application_manager/src/event_engine/event_dispatcher.cc
index a70906580..a552ef622 100644
--- a/SDL_Core/src/components/application_manager/src/event_engine/event_dispatcher.cc
+++ b/SDL_Core/src/components/application_manager/src/event_engine/event_dispatcher.cc
@@ -88,9 +88,11 @@ void EventDispatcher::remove_observer(const Event::EventID& event_id,
//ObserverList iterator
ObserverList::iterator observer_it = it->second.begin();
- for (; it->second.end() != observer_it; ++observer_it) {
+ while (it->second.end() != observer_it) {
if (observer->id() == (*observer_it)->id()) {
observer_it = it->second.erase(observer_it);
+ } else {
+ ++observer_it;
}
}
}
@@ -106,9 +108,11 @@ void EventDispatcher::remove_observer(EventObserver* const observer) {
//ObserverList iterator
ObserverList::iterator observer_it = it->second.begin();
- for (; it->second.end() != observer_it; ++observer_it) {
+ while (it->second.end() != observer_it) {
if (observer->id() == (*observer_it)->id()) {
observer_it = it->second.erase(observer_it);
+ } else {
+ ++observer_it;
}
}
}