-// 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
-
-// fill pfd array
- std::map<int,eSocketNotifier*>::iterator it(notifiers.begin());
- for (int i=0; i < fdAnz; i++, it++)
+ /* notes:
+ - we should use epoll(4)
+ - timer are checked twice. there was a strong reason for it, but i can't remember. (FIXME)
+ - for each time, we gettimeofday() and check wether the timer should fire.
+ we should do this all better - we know how long the poll last, so we know which
+ timers should fire. Problem is that a timer handler could have required so
+ much time that another timer fired.
+
+ A probably structure could look
+
+ while (1)
+ {
+ time = gettimeofday()
+ timeout = calculate_pending_timers(time);
+
+ doPoll(timeout or infinite);
+
+ if (poll_had_results)
+ handle_poll_handler();
+ else
+ fire_timers(time + timeout)
+ }
+
+ the gettimeofday() call is required because fire_timers could last more
+ than nothing.
+
+ when poll did no timeout, we don't handle timers, as this will be done
+ in the next iteration (without adding overhead - we had to get the new
+ time anyway
+ */
+
+ /* get current time */
+ timeval now;
+ gettimeofday(&now, 0);
+
+ int poll_timeout = -1; /* infinite in case of empty timer list */
+
+ if (m_timer_list)