diff --git a/library/ringbuffer/ringbuffer.c b/library/ringbuffer/ringbuffer.c index f8ac6fb..76d40cd 100644 --- a/library/ringbuffer/ringbuffer.c +++ b/library/ringbuffer/ringbuffer.c @@ -78,6 +78,7 @@ void rd_RingbufferInit(rd_ringbuf_t *rb, char *pool, int size) int rd_RingbufferSpaceLen(rd_ringbuf_t *rb) { if (!rb) return -1; + int iRet = 0; unsigned short wi = ATOMIC_LOAD(&rb->m_sWriteIndex, unsigned short, ATOMIC_ORDER_ACQUIRE); unsigned short ri = ATOMIC_LOAD(&rb->m_sReadIndex, unsigned short, ATOMIC_ORDER_RELAXED); @@ -85,9 +86,19 @@ int rd_RingbufferSpaceLen(rd_ringbuf_t *rb) unsigned char rb_m = ATOMIC_LOAD(&rb->m_bReadMirror, unsigned char, ATOMIC_ORDER_RELAXED); if (wb == rb_m) { - return rb->m_iBufsize - (wi - ri); + iRet = rb->m_iBufsize - (wi - ri); } else { - return ri - wi; + iRet = ri - wi; + } + + if (iRet > 0) + { + return iRet; + } + else + { + log_e("wb = %d, rb_m = %d, wi = %d, ri = %d", wb, rb_m, wi, ri); + return 0; } }