base: fix a very theoretical performance problem
authorFelix Domke <tmbinc@elitedvb.net>
Fri, 25 Nov 2005 03:12:16 +0000 (03:12 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Fri, 25 Nov 2005 03:12:16 +0000 (03:12 +0000)
lib/base/ebase.cpp
lib/base/ebase.h

index 7f84cc9..a3ecbc7 100644 (file)
@@ -227,6 +227,9 @@ void eMainloop::processOneEvent()
                /* when we not processed anything, check timers. */
        if (!ret)
        {
+                       /* we know that this time has passed. */
+               now += poll_timeout;
+               
                singleLock s(recalcLock);
 
                        /* this will never change while we have the recalcLock */
@@ -235,7 +238,7 @@ void eMainloop::processOneEvent()
                        return;
 
                        /* process all timers which are ready. first remove them out of the list. */
-               while ((!m_timer_list.empty()) && (m_timer_list.begin()->getNextActivation() < now))
+               while ((!m_timer_list.empty()) && (m_timer_list.begin()->getNextActivation() <= now))
                        m_timer_list.begin()->activate();
        }
 }
index 2a1fe62..d470941 100644 (file)
@@ -22,6 +22,11 @@ static inline bool operator<( const timeval &t1, const timeval &t2 )
        return t1.tv_sec < t2.tv_sec || (t1.tv_sec == t2.tv_sec && t1.tv_usec < t2.tv_usec);
 }
 
+static inline bool operator<=( const timeval &t1, const timeval &t2 )
+{
+       return t1.tv_sec < t2.tv_sec || (t1.tv_sec == t2.tv_sec && t1.tv_usec <= t2.tv_usec);
+}
+
 static inline timeval &operator+=( timeval &t1, const timeval &t2 )
 {
        t1.tv_sec += t2.tv_sec;