From 48dbb7f5b823e3d205cc66a747783e56543cf401 Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 21 Oct 2005 18:46:38 +0000 Subject: [PATCH] Bugfix: leave ringbuf mutex protected through-out RingBufRead() - should keep semaphore from being prematurely reset. --- src/sbbs3/ringbuf.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/sbbs3/ringbuf.c b/src/sbbs3/ringbuf.c index 247ad9b36b..fe18324ae2 100644 --- a/src/sbbs3/ringbuf.c +++ b/src/sbbs3/ringbuf.c @@ -227,14 +227,12 @@ DWORD RINGBUFCALL RingBufRead( RingBuf* rb, BYTE* dst, DWORD cnt ) { DWORD max, first, remain, len; - len = RingBufFull( rb ); - if( len == 0 ) - return(0); - #ifdef RINGBUF_MUTEX pthread_mutex_lock(&rb->mutex); #endif + len = RINGBUF_FILL_LEVEL(rb); + if( len < cnt ) cnt = len; @@ -249,7 +247,7 @@ DWORD RINGBUFCALL RingBufRead( RingBuf* rb, BYTE* dst, DWORD cnt ) remain = cnt - first; } - if(dst!=NULL) { + if(first && dst!=NULL) { rb_memcpy( dst, rb->pTail, first ); dst += first; } @@ -267,14 +265,14 @@ DWORD RINGBUFCALL RingBufRead( RingBuf* rb, BYTE* dst, DWORD cnt ) rb->pTail = rb->pStart; #ifdef RINGBUF_SEM /* clear/signal semaphores, if appropriate */ - if(len-cnt==0) /* empty */ + if(RINGBUF_FILL_LEVEL(rb) == 0) /* empty */ sem_reset(&rb->sem); - if(len-cnt<rb->highwater_mark) + if(RINGBUF_FILL_LEVEL(rb) < rb->highwater_mark) sem_reset(&rb->highwater_sem); #endif #ifdef RINGBUF_EVENT - if(rb->empty_event!=NULL && len-cnt==0) + if(rb->empty_event!=NULL && RINGBUF_FILL_LEVEL(rb)==0) SetEvent(rb->empty_event); #endif -- GitLab