all repos — fluxbox @ b839dcaf1e5e11ce41b1e0e3d6c2d4d321fd236e

custom fork of the fluxbox windowmanager

iterator fix
fluxgen fluxgen
commit

b839dcaf1e5e11ce41b1e0e3d6c2d4d321fd236e

parent

ea4c11a52e05844c3ebd99a6ee5b44a04852067b

1 files changed, 12 insertions(+), 10 deletions(-)

jump to
M src/Timer.ccsrc/Timer.cc

@@ -128,22 +128,24 @@ TimerList::iterator it = m_timerlist.begin();

//must check end ...the timer might remove //it self from the list (should be fixed in the future) for(; it != m_timerlist.end(); ++it) { - tm.tv_sec = (*it)->getStartTime().tv_sec + - (*it)->getTimeout().tv_sec; - tm.tv_usec = (*it)->getStartTime().tv_usec + - (*it)->getTimeout().tv_usec; + //This is to make sure we don't get an invalid iterator + //when we do fireTimeout + BTimer &t = *(*it); + tm.tv_sec = t.getStartTime().tv_sec + + t.getTimeout().tv_sec; + tm.tv_usec = t.getStartTime().tv_usec + + t.getTimeout().tv_usec; if ((now.tv_sec < tm.tv_sec) || (now.tv_sec == tm.tv_sec && now.tv_usec < tm.tv_usec)) break; - (*it)->fireTimeout(); - + t.fireTimeout(); // restart the current timer so that the start time is updated - if (! (*it)->doOnce()) - (*it)->start(); - else { - (*it)->stop(); + if (! t.doOnce()) + t.start(); + else { + t.stop(); it--; } }