Fix ringbuffer number wrap around issue causing buffer items getting overwritten and thus lost.

remotes/origin/master-1.0.x
Victor Julien 15 years ago
parent 8514132851
commit 3a8c0d2cfe

@ -113,7 +113,7 @@ int RingBufferMrSw8Put(RingBufferMrSw8 *rb, void *ptr) {
SCLogDebug("ptr %p", ptr); SCLogDebug("ptr %p", ptr);
/* buffer is full, wait... */ /* buffer is full, wait... */
while ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { while ((unsigned char)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
/* break out if the engine wants to shutdown */ /* break out if the engine wants to shutdown */
if (rb->shutdown != 0) if (rb->shutdown != 0)
return -1; return -1;
@ -200,7 +200,7 @@ int RingBufferMrSwPut(RingBufferMrSw *rb, void *ptr) {
SCLogDebug("ptr %p", ptr); SCLogDebug("ptr %p", ptr);
/* buffer is full, wait... */ /* buffer is full, wait... */
while ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { while ((unsigned short)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
/* break out if the engine wants to shutdown */ /* break out if the engine wants to shutdown */
if (rb->shutdown != 0) if (rb->shutdown != 0)
return -1; return -1;
@ -259,7 +259,7 @@ void *RingBufferSrSwGet(RingBufferSrSw *rb) {
int RingBufferSrSwPut(RingBufferSrSw *rb, void *ptr) { int RingBufferSrSwPut(RingBufferSrSw *rb, void *ptr) {
/* buffer is full, wait... */ /* buffer is full, wait... */
while ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { while ((unsigned short)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
/* break out if the engine wants to shutdown */ /* break out if the engine wants to shutdown */
if (rb->shutdown != 0) if (rb->shutdown != 0)
return -1; return -1;
@ -363,7 +363,7 @@ int RingBufferMrMw8Put(RingBufferMrMw8 *rb, void *ptr) {
/* buffer is full, wait... */ /* buffer is full, wait... */
retry: retry:
while ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { while ((unsigned char)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
/* break out if the engine wants to shutdown */ /* break out if the engine wants to shutdown */
if (rb->shutdown != 0) if (rb->shutdown != 0)
return -1; return -1;
@ -374,7 +374,7 @@ retry:
/* get our lock */ /* get our lock */
SCSpinLock(&rb->spin); SCSpinLock(&rb->spin);
/* if while we got our lock the buffer changed, we need to retry */ /* if while we got our lock the buffer changed, we need to retry */
if ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { if ((unsigned char)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
SCSpinUnlock(&rb->spin); SCSpinUnlock(&rb->spin);
goto retry; goto retry;
} }
@ -480,7 +480,7 @@ int RingBufferMrMwPut(RingBufferMrMw *rb, void *ptr) {
/* buffer is full, wait... */ /* buffer is full, wait... */
retry: retry:
while ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { while ((unsigned short)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
/* break out if the engine wants to shutdown */ /* break out if the engine wants to shutdown */
if (rb->shutdown != 0) if (rb->shutdown != 0)
return -1; return -1;
@ -491,7 +491,7 @@ retry:
/* get our lock */ /* get our lock */
SCSpinLock(&rb->spin); SCSpinLock(&rb->spin);
/* if while we got our lock the buffer changed, we need to retry */ /* if while we got our lock the buffer changed, we need to retry */
if ((SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) { if ((unsigned short)(SC_ATOMIC_GET(rb->write) + 1) == SC_ATOMIC_GET(rb->read)) {
SCSpinUnlock(&rb->spin); SCSpinUnlock(&rb->spin);
goto retry; goto retry;
} }

Loading…
Cancel
Save