diff -r eee959fee5f5 Python/condvar.h --- a/Python/condvar.h Sat May 07 21:13:50 2016 +0300 +++ b/Python/condvar.h Mon May 16 16:51:28 2016 +0200 @@ -94,15 +94,24 @@ int r; struct timespec ts; struct timeval deadline; + struct timeval timedout; + static PY_LONG_LONG last_us = 0; + us = last_us > us ? last_us: us; + last_us = 0; PyCOND_GETTIMEOFDAY(&deadline); PyCOND_ADD_MICROSECONDS(deadline, us); ts.tv_sec = deadline.tv_sec; ts.tv_nsec = deadline.tv_usec * 1000; r = pthread_cond_timedwait((cond), (mut), &ts); - if (r == ETIMEDOUT) + if (r == ETIMEDOUT) { + PyCOND_GETTIMEOFDAY(&timedout); + if (timedout.tv_usec > deadline.tv_usec) + timedout.tv_usec += 100000; + last_us = timedout.tv_usec - deadline.tv_usec; return 1; + } else if (r) return -1; else