-// process pending timers...
- long usec=0;
-
- while (TimerList && (usec = timeout_usec( TimerList.begin()->getNextActivation() ) ) <= 0 )
- TimerList.begin()->activate();
-
- int fdAnz = notifiers.size();
- pollfd* pfd = new pollfd[fdAnz]; // make new pollfd array
+ int return_reason = 0;
+ /* get current time */
+ timeval now;
+ gettimeofday(&now, 0);
+ m_now_is_invalid = 0;
+
+ if (additional && !PyDict_Check(additional))
+ eFatal("additional, but it's not dict");
+
+ if (additional && !res)
+ eFatal("additional, but no res");
+
+ int poll_timeout = -1; /* infinite in case of empty timer list */
+
+ 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)
+ poll_timeout = 0;
+ else /* convert us to ms */
+ poll_timeout /= 1000;
+ }
+
+ if ((user_timeout > 0) && (poll_timeout > 0) && ((unsigned int)poll_timeout > user_timeout))
+ {
+ poll_timeout = user_timeout;
+ return_reason = 1;
+ }