rbb 99/02/20 19:20:05
Modified: pthreads/src/main fdqueue.c Log: We actually want to signal a thread everytime we add something to the fdqueue, not just when the queue was empty before we added it. This was resulting in a bug where only one thread was ever actually working on a request, and when that request was done, it would get the next request and serve it. Not the most efficient algorithm. This should fix it. I tested it as best as possible, but Monday I'll test it better. Revision Changes Path 1.8 +1 -5 apache-apr/pthreads/src/main/fdqueue.c Index: fdqueue.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/main/fdqueue.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- fdqueue.c 1999/02/19 20:33:22 1.7 +++ fdqueue.c 1999/02/21 03:20:05 1.8 @@ -31,13 +31,9 @@ } queue->data[queue->tail].fd = fd; queue->data[queue->tail].addr = *addr; - /* If the queue was empty, signal that it no longer is. We use - bounds-1 because of annoying allocation logic. */ - if (queue->blanks >= queue->bounds - 1) { - pthread_cond_signal(&queue->not_empty); - } queue->tail = (queue->tail + 1) % queue->bounds; queue->blanks--; + pthread_cond_signal(&queue->not_empty); if (queue->blanks == 0) { pthread_cond_wait(&queue->not_full, &queue->one_big_mutex); }