From de995761db857efe05e325d6e60758e07b107d2e Mon Sep 17 00:00:00 2001
From: zzz <zzz@i2pmail.org>
Date: Fri, 3 Dec 2021 06:15:37 -0500
Subject: [PATCH] Tunnels: Change tunnel test failure count to AtomicInteger

---
 .../router/tunnel/TunnelCreatorConfig.java    | 26 ++++++++-----------
 1 file changed, 11 insertions(+), 15 deletions(-)

diff --git a/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java b/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java
index 7a4eca70a1..d39a1e5338 100644
--- a/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java
+++ b/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java
@@ -3,6 +3,7 @@ package net.i2p.router.tunnel;
 import java.util.Date;
 import java.util.List;
 import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import net.i2p.data.Base64;
 import net.i2p.data.Hash;
@@ -32,8 +33,7 @@ public abstract class TunnelCreatorConfig implements TunnelInfo {
     private final boolean _isInbound;
     private int _messagesProcessed;
     private long _verifiedBytesTransferred;
-    private boolean _failed;
-    private int _failures;
+    private final AtomicInteger _failures = new AtomicInteger();
     private boolean _reused;
     private int _priority;
     //private static final int THROUGHPUT_COUNT = 3;
@@ -213,23 +213,18 @@ public abstract class TunnelCreatorConfig implements TunnelInfo {
     
     /**
      * The tunnel failed a test, so (maybe) stop using it
+     *
+     * @return false if we stopped using it, true if still ok
      */
     public boolean tunnelFailed() {
-        _failures++;
-        if (_failures > MAX_CONSECUTIVE_TEST_FAILURES) {
-            _failed = true;
-            return false;
-        } else {
-            return true;
-        }
+        return _failures.incrementAndGet() <= MAX_CONSECUTIVE_TEST_FAILURES;
     }
 
-    public boolean getTunnelFailed() { return _failed; }
-    public int getTunnelFailures() { return _failures; }
+    public boolean getTunnelFailed() { return _failures.get() > MAX_CONSECUTIVE_TEST_FAILURES; }
+    public int getTunnelFailures() { return _failures.get(); }
     
     public void testSuccessful(int ms) {
-        if (!_failed)
-            _failures = 0;
+        _failures.set(0);
     }
     
     /**
@@ -400,8 +395,9 @@ public abstract class TunnelCreatorConfig implements TunnelInfo {
         if (_messagesProcessed > 0)
             buf.append(" with ").append(_messagesProcessed).append("/").append(_verifiedBytesTransferred).append(" msgs/bytes");
     
-        if (_failures > 0)
-            buf.append(" with ").append(_failures).append(" failures");
+        int fails = _failures.get();
+        if (fails > 0)
+            buf.append(" with ").append(fails).append(" consec. failures");
         return buf.toString();
     }
 
-- 
GitLab