Browse Source

【主线待合】这里出现负数记一个错误日志并且强制返回0,防止memcpy接收负数而崩溃

paint_robot_new-v1.5
Lizongdi 2 weeks ago
parent
commit
9e51832ceb
  1. 15
      library/ringbuffer/ringbuffer.c

15
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) int rd_RingbufferSpaceLen(rd_ringbuf_t *rb)
{ {
if (!rb) return -1; if (!rb) return -1;
int iRet = 0;
unsigned short wi = ATOMIC_LOAD(&rb->m_sWriteIndex, unsigned short, ATOMIC_ORDER_ACQUIRE); 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); 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); unsigned char rb_m = ATOMIC_LOAD(&rb->m_bReadMirror, unsigned char, ATOMIC_ORDER_RELAXED);
if (wb == rb_m) { if (wb == rb_m) {
return rb->m_iBufsize - (wi - ri); iRet = rb->m_iBufsize - (wi - ri);
} else { } 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;
} }
} }

Loading…
Cancel
Save