The timeout was run early if it was to be run in less than 1 millisecond.
This could have resulted in an infinite loop in some special situations
when timeout_add_absolute() was used in a timeout callback.
tv_r->tv_usec += 1000000;
}
- if (tv_r->tv_sec < 0 || (tv_r->tv_sec == 0 && tv_r->tv_usec < 1000)) {
+ if (tv_r->tv_sec < 0) {
+ /* The timeout should have been called already */
tv_r->tv_sec = 0;
tv_r->tv_usec = 0;
return 0;
/* round wait times up to next millisecond */
ret = tv_r->tv_sec * 1000 + (tv_r->tv_usec + 999) / 1000;
- i_assert(ret > 0 && tv_r->tv_sec >= 0 && tv_r->tv_usec >= 0);
+ i_assert(ret >= 0 && tv_r->tv_sec >= 0 && tv_r->tv_usec >= 0);
return ret;
}