forked from I2P_Developers/i2p.i2p
NTCP: Atomics for NTCP final state (ticket #2701)
This commit is contained in:
@ -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; }
|
||||
|
Reference in New Issue
Block a user