From 2cfe6788cef6b1ae88744be4162489cb81390127 Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 25 Mar 2008 15:36:49 +0000 Subject: [PATCH] fixed bug which may make sems crash when removing timers git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@823 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/plug-in/session_timer/UserTimer.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/core/plug-in/session_timer/UserTimer.cpp b/core/plug-in/session_timer/UserTimer.cpp index 3c1ecb7a..22778da1 100644 --- a/core/plug-in/session_timer/UserTimer.cpp +++ b/core/plug-in/session_timer/UserTimer.cpp @@ -152,11 +152,15 @@ void UserTimer::unsafe_removeTimer(int id, const string& session_id) void UserTimer::removeTimers(const string& session_id) { // DBG("removing timers for <%s>\n", session_id.c_str()); timers_mut.lock(); - for (std::set::iterator it = timers.begin(); - it != timers.end(); it++) { + std::set::iterator it = timers.begin(); + while (it != timers.end()) { if (it->session_id == session_id) { - timers.erase(it); + std::set::iterator d_it = it; + it++; + timers.erase(d_it); // DBG(" o timer removed.\n"); + } else { + it++; } } timers_mut.unlock(); @@ -165,11 +169,15 @@ void UserTimer::removeTimers(const string& session_id) { void UserTimer::removeUserTimers(const string& session_id) { // DBG("removing User timers for <%s>\n", session_id.c_str()); timers_mut.lock(); - for (std::set::iterator it = timers.begin(); - it != timers.end(); it++) { + std::set::iterator it = timers.begin(); + while (it != timers.end()) { if ((it->id > 0)&&(it->session_id == session_id)) { - timers.erase(it); + std::set::iterator d_it = it; + it++; + timers.erase(d_it); // DBG(" o timer removed.\n"); + } else { + it++; } } timers_mut.unlock();