diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java index d84a78c997..eb6292aa8a 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishBase.java @@ -3,6 +3,7 @@ package net.i2p.router.transport.ntcp; import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import net.i2p.router.Router; import net.i2p.router.RouterContext; @@ -108,6 +109,8 @@ abstract class EstablishBase implements EstablishState { protected final Object _stateLock = new Object(); protected volatile State _state; + private final AtomicBoolean _isCorrupt = new AtomicBoolean(); + private final AtomicBoolean _isComplete = new AtomicBoolean(); protected enum State { OB_INIT, @@ -218,6 +221,8 @@ abstract class EstablishBase implements EstablishState { protected void changeState(State state) { synchronized (_stateLock) { _state = state; + _isCorrupt.set(state == State.CORRUPT); + _isComplete.set(state == State.VERIFIED); } } @@ -248,9 +253,7 @@ abstract class EstablishBase implements EstablishState { /** did the handshake fail for some reason? */ public boolean isCorrupt() { - synchronized(_stateLock) { - return _state == State.CORRUPT; - } + return _isCorrupt.get(); } /** @@ -261,9 +264,7 @@ abstract class EstablishBase implements EstablishState { * @return is the handshake complete and valid? */ public boolean isComplete() { - synchronized(_stateLock) { - return _state == State.VERIFIED; - } + return _isComplete.get(); } /** @@ -352,7 +353,7 @@ abstract class EstablishBase implements EstablishState { public VerifiedEstablishState() { super(); - _state = State.VERIFIED; + changeState(State.VERIFIED); } public int getVersion() { return 1; } @@ -384,7 +385,7 @@ abstract class EstablishBase implements EstablishState { public FailedEstablishState() { super(); - _state = State.CORRUPT; + changeState(State.CORRUPT); } public int getVersion() { return 1; }