diff --git a/src/ucore_threadqueue.c b/src/ucore_threadqueue.c index df0f4f1..0f23afd 100644 --- a/src/ucore_threadqueue.c +++ b/src/ucore_threadqueue.c @@ -126,7 +126,12 @@ int uc_thread_queue_get(struct uc_threadqueue *queue, const struct timespec *tim //another thread popped the remaining elment before we did queue->num_read_waiters++; if (timeout) { - rc = pthread_cond_timedwait(&queue->read_cond, &queue->mutex, &abstimeout); + //fastpath, check for a poll + if(timeout->tv_sec == 0 && timeout->tv_nsec == 0) { + rc = ETIMEDOUT; + } else { + rc = pthread_cond_timedwait(&queue->read_cond, &queue->mutex, &abstimeout); + } } else { pthread_cond_wait(&queue->read_cond, &queue->mutex);