From c5435410bac5cb1fd0eda1de84063b576d56620b Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Tue, 24 Mar 2020 19:14:28 +0000
Subject: [PATCH] atomic

---
 .../src/net/i2p/client/streaming/impl/MessageHandler.java | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java
index 1e90ce951f..8829a0bff3 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/impl/MessageHandler.java
@@ -2,6 +2,7 @@ package net.i2p.client.streaming.impl;
 
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import net.i2p.I2PAppContext;
 import net.i2p.client.I2PSession;
@@ -22,7 +23,7 @@ class MessageHandler implements I2PSessionMuxedListener {
     private final I2PAppContext _context;
     private final Log _log;
     private final Set<I2PSocketManager.DisconnectListener> _listeners;
-    private boolean _restartPending;
+    private final AtomicBoolean _restartPending = new AtomicBoolean();
     
     public MessageHandler(I2PAppContext ctx, ConnectionManager mgr) {
         _manager = mgr;
@@ -109,9 +110,8 @@ class MessageHandler implements I2PSessionMuxedListener {
             _log.warn("I2PSession disconnected");
         _manager.disconnectAllHard();
         // kill anybody waiting in accept()
-        if (_restartPending) {
+        if (_restartPending.compareAndSet(true, false)) {
             _manager.getConnectionHandler().setRestartPending();
-            _restartPending = false;
         } else {
             _manager.getConnectionHandler().setActive(false);
         }
@@ -130,7 +130,7 @@ class MessageHandler implements I2PSessionMuxedListener {
      * @param error the actual error
      */
     public void errorOccurred(I2PSession session, String message, Throwable error) {
-        _restartPending = message.contains("restart");
+        _restartPending.set(message.contains("restart"));
         if (_log.shouldLog(Log.WARN))
             _log.warn("error occurred: " + message, error); 
         //_manager.disconnectAllHard();
-- 
GitLab