NTCP: Atomics for NTCP final state (ticket #2701)

This commit is contained in:
zzz
2020-07-11 13:12:25 +00:00
parent 075ac7ab43
commit f0bcab2e2c

View File

@ -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; }