diff options
author | Brendan Shanks <bshanks@audiovox.com> | 2014-03-27 13:01:58 -0700 |
---|---|---|
committer | Justin Dickow <jjdickow@gmail.com> | 2014-04-02 16:03:15 -0400 |
commit | e7de43c27bacc1da01574ee0fad5a560264b29fa (patch) | |
tree | 503b8bae07780327c561161a6a6248611188e57d | |
parent | 2b8d4aa3d31b8d8c5b30ec19fe9284f566ca96cd (diff) | |
download | smartdevicelink-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.cc | 8 |
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; } } } |