X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/07a0b9095023f888ec1a6fde069a862c29c16047..98a7f9e1e5f8ed89e6cc75c9347d85c9ecd4d470:/lib/base/ebase.cpp diff --git a/lib/base/ebase.cpp b/lib/base/ebase.cpp index 7300a571..7951f6e7 100644 --- a/lib/base/ebase.cpp +++ b/lib/base/ebase.cpp @@ -165,6 +165,7 @@ void eMainloop::processOneEvent() if (m_timer_list) { + singleLock s(recalcLock); poll_timeout = timeval_to_usec(m_timer_list.begin()->getNextActivation() - now); /* if current timer already passed, don't delay infinite. */ if (poll_timeout < 0) @@ -225,6 +226,8 @@ void eMainloop::processOneEvent() /* when we not processed anything, check timers. */ if (!ret) { + singleLock s(recalcLock); + /* process all timers which are ready. first remove them out of the list. */ while ((!m_timer_list.empty()) && (m_timer_list.begin()->getNextActivation() < now)) m_timer_list.begin()->activate(); @@ -287,9 +290,13 @@ void eMainloop::quit( int ret ) // call this to leave all loops void eMainloop::addTimeOffset(int offset) { - singleLock s(recalcLock); - for (ePtrList::iterator it = m_timer_list.begin(); it != m_timer_list.end(); ++it ) - it->addTimeOffset(offset); + for (ePtrList::iterator it(eMainloop::existing_loops) + ;it != eMainloop::existing_loops.end(); ++it) + { + singleLock s(it->recalcLock); + for (ePtrList::iterator tit = it->m_timer_list.begin(); tit != it->m_timer_list.end(); ++tit ) + tit->addTimeOffset(offset); + } } eApplication* eApp = 0;