1.1 --- a/src/tqueue.c Fri Mar 02 23:49:10 2012 +1000
1.2 +++ b/src/tqueue.c Sun Mar 18 14:18:18 2012 +1000
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.13 tqueue.tqueue[tqueue.tail].data = data;
1.14 tqueue.tqueue[tqueue.tail].synchronous = sync;
1.16 + if( tqueue.tail == TQUEUE_LENGTH )
1.23 int tqueue_send_message( tqueue_callback callback, void *data )
1.26 pthread_mutex_lock(&tqueue.mutex);
1.27 if( TQUEUE_FULL() ) {
1.28 /* Wait for the queue to clear */
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.39 /************** Consumer thread **************/
1.41 void *data = tqueue.tqueue[tqueue.head].data;
1.42 gboolean sync = tqueue.tqueue[tqueue.head].synchronous;
1.44 + if( tqueue.head == TQUEUE_LENGTH )
1.48 pthread_cond_signal( &tqueue.producer_full_wait );