diff options
author | Robert Godfrey <rgodfrey@apache.org> | 2015-02-12 17:57:11 +0000 |
---|---|---|
committer | Robert Godfrey <rgodfrey@apache.org> | 2015-02-12 17:57:11 +0000 |
commit | 822ef8b38a63e3b351b30c382bfc77de39904c77 (patch) | |
tree | 750a506fe0466f1a6420ce176b2e0ab2b4d3f086 | |
parent | a3c5d96d61fdaf76f4cf9dd4e3f543fb87ee95d6 (diff) | |
download | qpid-python-822ef8b38a63e3b351b30c382bfc77de39904c77.tar.gz |
QPID-6374 : avoid taking a lock when not modifying a value
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1659341 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java index 86e1bb0a8b..8f5e9524b6 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/client/AMQSession.java @@ -224,7 +224,7 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic private volatile boolean _usingDispatcherForCleanup; /** Used to indicates that the connection to which this session belongs, has been stopped. */ - private boolean _connectionStopped; + private final AtomicBoolean _connectionStopped = new AtomicBoolean(); /** Used to indicate that this session has a message listener attached to it. */ private boolean _hasMessageListeners; @@ -3410,25 +3410,28 @@ public abstract class AMQSession<C extends BasicMessageConsumer, P extends Basic // only call while holding lock final boolean connectionStopped() { - return _connectionStopped; + return _connectionStopped.get(); } boolean setConnectionStopped(boolean connectionStopped) { - boolean currently; - synchronized (_lock) + boolean currently = _connectionStopped.get(); + if(connectionStopped != currently) { - currently = _connectionStopped; - _connectionStopped = connectionStopped; - _lock.notify(); - - if (_dispatcherLogger.isDebugEnabled()) + synchronized (_lock) { - _dispatcherLogger.debug("Set Dispatcher Connection " + (connectionStopped ? "Stopped" : "Started") - + ": Currently " + (currently ? "Stopped" : "Started")); + _connectionStopped.set(connectionStopped); + _lock.notify(); + + if (_dispatcherLogger.isDebugEnabled()) + { + _dispatcherLogger.debug("Set Dispatcher Connection " + (connectionStopped + ? "Stopped" + : "Started") + + ": Currently " + (currently ? "Stopped" : "Started")); + } } } - return currently; } |