From 0952625b1459b14a3847fd7d6af560bde8561106 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 8 May 2003 20:48:50 +0000
Subject: [PATCH] All the ring buf functions now reset (clear) the semaphores
 when appropriate.

---
 src/sbbs3/ringbuf.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/sbbs3/ringbuf.c b/src/sbbs3/ringbuf.c
index fa7fdfe0f9..f839a1285f 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
-- 
GitLab