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 1e90ce951f7dd2c06661a867123d6eb130014589..8829a0bff37c71cb2fbe7f4e2513f3d66be8c2ad 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();