From 91d2b115be0dc28c26c47e5331bdaea01cc3abd3 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 9 Jan 2017 15:40:31 +0100 Subject: Guarantee that numPending will be 0 at least and at most once. --- .../src/main/java/com/yahoo/feedapi/SharedSender.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'vespaclient-core/src/main') diff --git a/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java b/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java index 67581438956..4c96a7efc0b 100755 --- a/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java +++ b/vespaclient-core/src/main/java/com/yahoo/feedapi/SharedSender.java @@ -191,15 +191,18 @@ public class SharedSender implements ReplyHandler { return; } - boolean active = owner.handleReply(r, state.getNumPending() - 1); + int numPending = state.getNumPending() - 1; + boolean noMorePending = state.decPending(1); + if (noMorePending) { + numPending = 0; + } + boolean active = owner.handleReply(r, numPending); if (log.isLoggable(LogLevel.SPAM)) { log.log(LogLevel.SPAM, "Received reply for file " + owner.toString() + ", count was " + state.getNumPending()); } if (!active) { state.clearPending(); activeOwners.remove(owner); - } else { - state.decPending(1); } } @@ -241,8 +244,8 @@ public class SharedSender implements ReplyHandler { sync.releaseShared(-count); } - void decPending(int count) { - sync.releaseShared(count); + boolean decPending(int count) { + return sync.releaseShared(count); } void waitMaxPendingBelow(int limit) { -- cgit v1.2.3