revision 1273:32b2a340f8b3
summary |
tree |
shortlog |
changelog |
graph |
changeset |
raw | bz2 | zip | gz changeset | 1273:32b2a340f8b3 |
parent | 1272:0b947d924029 |
child | 1274:4dff831f1a2e |
author | nkeynes |
date | Sun Mar 18 14:18:18 2012 +1000 (12 years ago) |
Fix silly errors in tqueue implementation
src/tqueue.c | view | annotate | diff | log |
1.1 --- a/src/tqueue.c Sat Mar 17 08:36:17 2012 +10001.2 +++ b/src/tqueue.c Sun Mar 18 14:18:18 2012 +10001.3 @@ -41,7 +41,7 @@1.5 /************** Producer thread **************/1.6 #define TQUEUE_EMPTY() (tqueue.head == tqueue.tail)1.7 -#define TQUEUE_FULL() ((tqueue.head == tqueue.tail+1) || (tqueue.head == 0 && tqueue.tail == TQUEUE_LENGTH))1.8 +#define TQUEUE_FULL() ((tqueue.head == tqueue.tail+1) || (tqueue.head == 0 && tqueue.tail == (TQUEUE_LENGTH-1)))1.10 static void tqueue_enqueue( tqueue_callback callback, void *data, gboolean sync )1.11 {1.12 @@ -50,6 +50,8 @@1.13 tqueue.tqueue[tqueue.tail].data = data;1.14 tqueue.tqueue[tqueue.tail].synchronous = sync;1.15 tqueue.tail++;1.16 + if( tqueue.tail == TQUEUE_LENGTH )1.17 + tqueue.tail = 0;1.18 }1.20 /**1.21 @@ -73,6 +75,7 @@1.22 */1.23 int tqueue_send_message( tqueue_callback callback, void *data )1.24 {1.25 + int result;1.26 pthread_mutex_lock(&tqueue.mutex);1.27 if( TQUEUE_FULL() ) {1.28 /* Wait for the queue to clear */1.29 @@ -81,8 +84,9 @@1.30 tqueue_enqueue( callback, data, TRUE );1.31 pthread_cond_signal(&tqueue.consumer_wait);1.32 pthread_cond_wait(&tqueue.producer_sync_wait, &tqueue.mutex);1.33 - return tqueue.last_result;1.34 + result = tqueue.last_result;1.35 pthread_mutex_unlock(&tqueue.mutex);1.36 + return result;1.37 }1.39 /************** Consumer thread **************/1.40 @@ -95,6 +99,8 @@1.41 void *data = tqueue.tqueue[tqueue.head].data;1.42 gboolean sync = tqueue.tqueue[tqueue.head].synchronous;1.43 tqueue.head++;1.44 + if( tqueue.head == TQUEUE_LENGTH )1.45 + tqueue.head = 0;1.47 if( wasFull ) {1.48 pthread_cond_signal( &tqueue.producer_full_wait );
.