From 845003f500fa3bb0ac3f1bf41ee4d55b71720fa8 Mon Sep 17 00:00:00 2001 From: panxiaojun233 <43985911+panxiaojun233@users.noreply.github.com> Date: Mon, 24 May 2021 11:54:12 +0800 Subject: [PATCH] Fix semaphore usage error when calculating address. (#7850) * fix addr cache bug * fix router chain loop err --- .../java/org/apache/dubbo/rpc/cluster/RouterChain.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java index 29a7be5799..a895677e33 100644 --- a/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java +++ b/dubbo-cluster/src/main/java/org/apache/dubbo/rpc/cluster/RouterChain.java @@ -267,11 +267,11 @@ public class RouterChain { } if (notify) { if (loopPermitNotify.tryAcquire()) { - loopPool.submit(new NotifyLoopRunnable(true)); + loopPool.submit(new NotifyLoopRunnable(true, loopPermitNotify)); } } else { if (loopPermit.tryAcquire()) { - loopPool.submit(new NotifyLoopRunnable(false)); + loopPool.submit(new NotifyLoopRunnable(false, loopPermit)); } } } @@ -279,14 +279,16 @@ public class RouterChain { class NotifyLoopRunnable implements Runnable { private final boolean notify; + private final Semaphore loopPermit; - public NotifyLoopRunnable(boolean notify) { + public NotifyLoopRunnable(boolean notify, Semaphore loopPermit) { this.notify = notify; + this.loopPermit = loopPermit; } @Override public void run() { - loopPermitNotify.release(); + loopPermit.release(); buildCache(notify); } }