From 6d8431a77ed816f93c0d1ceb359f9b8d2c3782cf Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 17 Jun 2019 15:46:28 +0000 Subject: [PATCH] I2CP: Use EnumSets for state checking --- .../net/i2p/client/impl/I2PSessionImpl.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/core/java/src/net/i2p/client/impl/I2PSessionImpl.java b/core/java/src/net/i2p/client/impl/I2PSessionImpl.java index fad799a8e8..3d5e9f1a8b 100644 --- a/core/java/src/net/i2p/client/impl/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/impl/I2PSessionImpl.java @@ -21,10 +21,12 @@ import java.net.Socket; import java.net.UnknownHostException; import java.security.GeneralSecurityException; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.LinkedBlockingQueue; @@ -166,6 +168,18 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 CLOSED } + private static final Set<State> STATES_CLOSED = + EnumSet.of(State.INIT, State.CLOSED); + + private static final Set<State> STATES_OPENING = + EnumSet.of(State.INIT, State.OPENING); + + private static final Set<State> STATES_CLOSED_OR_OPENING = + EnumSet.of(State.INIT, State.CLOSED, State.OPENING); + + private static final Set<State> STATES_CLOSED_OR_CLOSING = + EnumSet.of(State.INIT, State.CLOSED, State.CLOSING); + protected State _state = State.INIT; protected final Object _stateLock = new Object(); @@ -850,7 +864,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 synchronized(_stateLock) { if (_state == State.GOTDATE) break; - if (_state != State.OPENING && _state != State.INIT) + if (!STATES_OPENING.contains(_state)) throw new IOException("Socket closed, state=" + _state); // InterruptedException caught by caller _stateLock.wait(1000); @@ -1165,7 +1179,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 */ public boolean isClosed() { synchronized (_stateLock) { - return _state == State.CLOSED || _state == State.INIT; + return STATES_CLOSED.contains(_state); } } @@ -1281,7 +1295,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 */ public void destroySession(boolean sendDisconnect) { synchronized(_stateLock) { - if (_state == State.CLOSING || _state == State.CLOSED || _state == State.INIT) + if (STATES_CLOSED_OR_CLOSING.contains(_state)) return; changeState(State.CLOSING); } @@ -1378,7 +1392,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 protected void disconnect() { State oldState; synchronized(_stateLock) { - if (_state == State.CLOSING || _state == State.CLOSED || _state == State.INIT) + if (STATES_CLOSED_OR_CLOSING.contains(_state)) return; oldState = _state; changeState(State.CLOSING); @@ -1606,9 +1620,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 } synchronized (_stateLock) { // not before GOTDATE - if (_state == State.CLOSED || - _state == State.INIT || - _state == State.OPENING) { + if (STATES_CLOSED_OR_OPENING.contains(_state)) { if (_log.shouldLog(Log.INFO)) _log.info("Session closed, cannot lookup " + h); return null; @@ -1750,9 +1762,7 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2 public int[] bandwidthLimits() throws I2PSessionException { synchronized (_stateLock) { // not before GOTDATE - if (_state == State.CLOSED || - _state == State.INIT || - _state == State.OPENING) { + if (STATES_CLOSED_OR_OPENING.contains(_state)) { if (_log.shouldLog(Log.INFO)) _log.info("Session closed, cannot get bw limits"); return null; -- GitLab