From 10d951e2d79cd48144ce32bcac2c99d44d156f09 Mon Sep 17 00:00:00 2001 From: Martin Konrad Date: Thu, 29 Nov 2018 19:14:55 -0500 Subject: [PATCH] Fix incorrect value for highWaterMark in epicsRingBytes --- src/libCom/ring/epicsRingBytes.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/libCom/ring/epicsRingBytes.c b/src/libCom/ring/epicsRingBytes.c index c38e32b77..a9b13b990 100644 --- a/src/libCom/ring/epicsRingBytes.c +++ b/src/libCom/ring/epicsRingBytes.c @@ -121,7 +121,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesPut( { ringPvt *pring = (ringPvt *)id; int nextGet, nextPut, size; - int freeCount, copyCount, topCount; + int freeCount, copyCount, topCount, used; if (pring->lock) epicsSpinLock(pring->lock); nextGet = pring->nextGet; @@ -135,11 +135,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesPut( return 0; } if (nbytes) { - int curUsed = pring->size - SLOP - freeCount; memcpy ((void *)&pring->buffer[nextPut], value, nbytes); - if (curUsed > epicsAtomicGetIntT(&pring->highWaterMark)) { - epicsAtomicSetIntT(&pring->highWaterMark, curUsed); - } } nextPut += nbytes; } @@ -152,11 +148,7 @@ epicsShareFunc int epicsShareAPI epicsRingBytesPut( topCount = size - nextPut; copyCount = (nbytes > topCount) ? topCount : nbytes; if (copyCount) { - int curUsed = pring->size - SLOP - freeCount; memcpy ((void *)&pring->buffer[nextPut], value, copyCount); - if (curUsed > epicsAtomicGetIntT(&pring->highWaterMark)) { - epicsAtomicSetIntT(&pring->highWaterMark, curUsed); - } } nextPut += copyCount; if (nextPut == size) { @@ -168,6 +160,12 @@ epicsShareFunc int epicsShareAPI epicsRingBytesPut( } pring->nextPut = nextPut; + used = nextPut - nextGet; + if (used < 0) used += pring->size; + if (used > epicsAtomicGetIntT(&pring->highWaterMark)) { + epicsAtomicSetIntT(&pring->highWaterMark, used); + } + if (pring->lock) epicsSpinUnlock(pring->lock); return nbytes; }