diff --git a/src/sbbs3/ringbuf.c b/src/sbbs3/ringbuf.c index fa7fdfe0f9e43c0594fb5f17ef9efcd19f80a9ab..f839a1285f3a1938405034930652ae89eea7d2b1 100644 --- a/src/sbbs3/ringbuf.c +++ b/src/sbbs3/ringbuf.c @@ -135,6 +135,13 @@ DWORD RINGBUFCALL RingBufFull( RingBuf* rb ) else retval = rb->size - (tail - head); +#ifdef RINGBUF_SEM + if(retval==0) /* empty */ + sem_reset(&rb->sem); + if(retval<rb->highwater_mark) + sem_reset(&rb->highwater_sem); +#endif + #ifdef RINGBUF_MUTEX pthread_mutex_unlock(&rb->mutex); #endif @@ -248,6 +255,10 @@ DWORD RINGBUFCALL RingBufRead( RingBuf* rb, BYTE* dst, DWORD cnt ) if(rb->pTail > rb->pEnd) rb->pTail = rb->pStart; +#ifdef RINGBUF_SEM /* clear semaphores, if appropriate */ + RingBufFull( rb ); +#endif + #ifdef RINGBUF_MUTEX pthread_mutex_unlock(&rb->mutex); #endif @@ -302,6 +313,10 @@ void RINGBUFCALL RingBufReInit(RingBuf* rb) pthread_mutex_lock(&rb->mutex); #endif rb->pHead = rb->pTail = rb->pStart; +#ifdef RINGBUF_SEM + sem_reset(&rb->sem); + sem_reset(&rb->highwater_sem); +#endif #ifdef RINGBUF_MUTEX pthread_mutex_unlock(&rb->mutex); #endif