Can you do us a big favor and please resubmit the patch without any whitespace changes? That is, only diff what you actually changed. We
No problem. Here she is.
-- jacob lewallen [EMAIL PROTECTED]
Index: apr_queue.c =================================================================== RCS file: /home/cvspublic/apr-util/misc/apr_queue.c,v retrieving revision 1.10 diff -u -u -r1.10 apr_queue.c --- apr_queue.c 13 Jan 2003 20:15:50 -0000 1.10 +++ apr_queue.c 10 Feb 2003 22:08:31 -0000 @@ -85,6 +85,8 @@ unsigned int in; /**< next empty location */ unsigned int out; /**< next filled location */ unsigned int bounds;/**< max size of queue */ + unsigned int full_waiters; + unsigned int empty_waiters; apr_thread_mutex_t *one_big_mutex; apr_thread_cond_t *not_empty; apr_thread_cond_t *not_full; @@ -169,6 +171,8 @@ queue->in = 0; queue->out = 0; queue->terminated = 0; + queue->full_waiters = 0; + queue->empty_waiters = 0; apr_pool_cleanup_register(a, queue, queue_destroy, apr_pool_cleanup_null); @@ -183,7 +187,6 @@ APU_DECLARE(apr_status_t) apr_queue_push(apr_queue_t *queue, void *data) { apr_status_t rv; - int need_signal = 0; if (queue->terminated) { return APR_EOF; /* no more elements ever again */ @@ -196,7 +199,9 @@ if (apr_queue_full(queue)) { if (!queue->terminated) { + queue->full_waiters++; rv = apr_thread_cond_wait(queue->not_full, queue->one_big_mutex); + queue->full_waiters--; if (rv != APR_SUCCESS) { apr_thread_mutex_unlock(queue->one_big_mutex); return rv; @@ -218,16 +223,11 @@ } } - /* if we were empty then signal that we aren't */ - if (apr_queue_empty(queue)) { - need_signal = 1; - } - queue->data[queue->in] = data; queue->in = (queue->in + 1) % queue->bounds; queue->nelts++; - if (need_signal == 1) { + if (queue->empty_waiters) { Q_DBG("sig !empty", queue); rv = apr_thread_cond_signal(queue->not_empty); if (rv != APR_SUCCESS) { @@ -248,7 +248,7 @@ APU_DECLARE(apr_status_t) apr_queue_trypush(apr_queue_t *queue, void *data) { apr_status_t rv; - int need_signal = 0; + if (queue->terminated) { return APR_EOF; /* no more elements ever again */ } @@ -262,17 +262,12 @@ rv = apr_thread_mutex_unlock(queue->one_big_mutex); return APR_EAGAIN; } - - /* if we were empty then signal that we aren't */ - if (apr_queue_empty(queue)) { - need_signal = 1; - } queue->data[queue->in] = data; queue->in = (queue->in + 1) % queue->bounds; queue->nelts++; - if (need_signal == 1) { + if (queue->empty_waiters) { Q_DBG("sig !empty", queue); rv = apr_thread_cond_signal(queue->not_empty); if (rv != APR_SUCCESS) { @@ -301,7 +296,6 @@ APU_DECLARE(apr_status_t) apr_queue_pop(apr_queue_t *queue, void **data) { apr_status_t rv; - int need_signal = 0; if (queue->terminated) { return APR_EOF; /* no more elements ever again */ @@ -315,7 +309,9 @@ /* Keep waiting until we wake up and find that the queue is not empty. */ if (apr_queue_empty(queue)) { if (!queue->terminated) { + queue->empty_waiters++; rv = apr_thread_cond_wait(queue->not_empty, queue->one_big_mutex); + queue->empty_waiters--; if (rv != APR_SUCCESS) { apr_thread_mutex_unlock(queue->one_big_mutex); return rv; @@ -336,15 +332,12 @@ } } } - if (apr_queue_full(queue)) { - need_signal = 1; - } *data = &queue->data[queue->out]; queue->nelts--; queue->out = (queue->out + 1) % queue->bounds; - if (need_signal == 1) { + if (queue->full_waiters) { Q_DBG("signal !full", queue); rv = apr_thread_cond_signal(queue->not_full); if (rv != APR_SUCCESS) { @@ -366,7 +359,6 @@ APU_DECLARE(apr_status_t) apr_queue_trypop(apr_queue_t *queue, void **data) { apr_status_t rv; - int need_signal = 0; if (queue->terminated) { return APR_EOF; /* no more elements ever again */ @@ -382,15 +374,12 @@ rv = apr_thread_mutex_unlock(queue->one_big_mutex); return APR_EAGAIN; } - if (apr_queue_full(queue)) { - need_signal = 1; - } *data = &queue->data[queue->out]; queue->nelts--; queue->out = (queue->out + 1) % queue->bounds; - if (need_signal == 1) { + if (queue->full_waiters) { Q_DBG("signal !full", queue); rv = apr_thread_cond_signal(queue->not_full); if (rv != APR_SUCCESS) {