Skip to content
Snippets Groups Projects
Commit c646ab4c authored by rswindell's avatar rswindell
Browse files

Bug-fix: don't assume mutexes are "recursive" (standard pthread mutexes aren't)

which caused lock-ups in RingBufWrite().
parent 0c96e724
No related branches found
No related tags found
No related merge requests found
......@@ -126,21 +126,24 @@ void RINGBUFCALL RingBufDispose( RingBuf* rb)
memset(rb,0,sizeof(RingBuf));
}
/* Non-mutex-protected (standard pthread mutexes are non-recursive) */
static DWORD ringbuf_full(RingBuf* rb)
{
if(rb->pHead >= rb->pTail)
return(rb->pHead - rb->pTail);
return(rb->size - (rb->pTail - (rb->pHead + 1)));
}
DWORD RINGBUFCALL RingBufFull( RingBuf* rb )
{
DWORD head,tail,retval;
DWORD retval;
#ifdef RINGBUF_MUTEX
pthread_mutex_lock(&rb->mutex);
#endif
head = (DWORD) rb->pHead;
tail = (DWORD) rb->pTail;
if(head >= tail)
retval = head - tail;
else
retval = rb->size - (tail - (head + 1));
retval = ringbuf_full(rb);
#ifdef RINGBUF_EVENT
if(rb->empty_event!=NULL) {
......@@ -210,7 +213,7 @@ DWORD RINGBUFCALL RingBufWrite( RingBuf* rb, BYTE* src, DWORD cnt )
#ifdef RINGBUF_SEM
sem_post(&rb->sem);
if(rb->highwater_mark!=0 && RingBufFull(rb)>=rb->highwater_mark)
if(rb->highwater_mark!=0 && ringbuf_full(rb)>=rb->highwater_mark)
sem_post(&rb->highwater_sem);
#endif
#ifdef RINGBUF_EVENT
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment