From 1732c7dbd7828bda8d1619c0105afd23aeafe60c Mon Sep 17 00:00:00 2001 From: Jacqueline Garrahan Date: Tue, 14 Jul 2026 15:21:04 -0700 Subject: [PATCH] epicsRingBytes: fix reversed operands in ResetHighWaterMark The used-bytes count is nextPut - nextGet everywhere else in this file (epicsRingBytesPut, epicsRingBytesUsedBytes), but epicsRingBytesResetHighWaterMark computed nextGet - nextPut. For a ring holding u bytes it therefore stored size-u; since Put only raises the mark, the high-water mark stayed permanently inflated and wrong. Co-Authored-By: Claude Opus 4.8 (1M context) --- modules/libcom/src/ring/epicsRingBytes.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/libcom/src/ring/epicsRingBytes.c b/modules/libcom/src/ring/epicsRingBytes.c index 2164ebed4..eb02e085a 100644 --- a/modules/libcom/src/ring/epicsRingBytes.c +++ b/modules/libcom/src/ring/epicsRingBytes.c @@ -244,7 +244,7 @@ LIBCOM_API void epicsStdCall epicsRingBytesResetHighWaterMark(epicsRingBytesId i ringPvt *pring = (ringPvt *)id; int used; if (pring->lock) epicsSpinLock(pring->lock); - used = pring->nextGet - pring->nextPut; + used = pring->nextPut - pring->nextGet; if (used < 0) used += pring->size; pring->highWaterMark = used; if (pring->lock) epicsSpinUnlock(pring->lock);