Github user cammckenzie commented on a diff in the pull request:
https://github.com/apache/curator/pull/262#discussion_r179001383
--- Diff:
curator-framework/src/main/java/org/apache/curator/framework/state/ConnectionStateManager.java
---
@@ -253,6 +253,7 @@ private void processEvents()
{
int lastNegotiatedSessionTimeoutMs =
client.getZookeeperClient().getLastNegotiatedSessionTimeoutMs();
int useSessionTimeoutMs = (lastNegotiatedSessionTimeoutMs
> 0) ? lastNegotiatedSessionTimeoutMs : sessionTimeoutMs;
+ useSessionTimeoutMs = sessionExpirationPercent > 0 &&
startOfSuspendedEpoch != 0 ? (useSessionTimeoutMs * sessionExpirationPercent) /
100 : useSessionTimeoutMs;
--- End diff --
I think you're right about synchronization of access to the
startOfSuspendedEpoch here. It can be modified via the addStateChange and
setToSuspended methods (which already synchronize access to it). I wonder if
it's cleaner just to make startOfSuspendedEpoch volatile?
---