Repository: wicket Updated Branches: refs/heads/master 7a5ba65c1 -> ec7a27e83
WICKET-6530: fix possible race-condition for session invalidation Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e7109db9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e7109db9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e7109db9 Branch: refs/heads/master Commit: e7109db9d446dc8fcf65eb0d91d840c13afdfc4c Parents: 080df22 Author: Emond Papegaaij <[email protected]> Authored: Mon Feb 5 14:10:21 2018 +0100 Committer: Emond Papegaaij <[email protected]> Committed: Mon Feb 5 14:16:30 2018 +0100 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Session.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/e7109db9/wicket-core/src/main/java/org/apache/wicket/Session.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java index 2c5616b..cb8f4a2 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -113,6 +113,12 @@ public abstract class Session implements IClusterable, IEventSink /** Logging object */ private static final Logger log = LoggerFactory.getLogger(Session.class); + /** records if session has been invalidated by the current request */ + private static final MetaDataKey<Boolean> SESSION_INVALIDATED = new MetaDataKey<Boolean>() + { + private static final long serialVersionUID = 1L; + }; + /** Name of session attribute under which this session is stored */ public static final String SESSION_ATTRIBUTE_NAME = "session"; @@ -191,9 +197,6 @@ public abstract class Session implements IClusterable, IEventSink /** Application level meta data. */ private MetaDataEntry<?>[] metaData; - /** True, if session has been invalidated */ - private transient volatile boolean sessionInvalidated = false; - /** * Temporary instance of the session store. Should be set on each request as it is not supposed * to go in the session. @@ -480,7 +483,7 @@ public abstract class Session implements IClusterable, IEventSink */ public void invalidate() { - sessionInvalidated = true; + RequestCycle.get().setMetaData(SESSION_INVALIDATED, true); } /** @@ -493,7 +496,7 @@ public abstract class Session implements IClusterable, IEventSink sessionStore.invalidate(RequestCycle.get().getRequest()); sessionStore = null; id = null; - sessionInvalidated = false; + RequestCycle.get().setMetaData(SESSION_INVALIDATED, false); clientInfo = null; dirty = false; metaData = null; @@ -542,7 +545,7 @@ public abstract class Session implements IClusterable, IEventSink */ public final boolean isSessionInvalidated() { - return sessionInvalidated; + return Boolean.TRUE.equals(RequestCycle.get().getMetaData(SESSION_INVALIDATED)); } /** @@ -659,7 +662,7 @@ public abstract class Session implements IClusterable, IEventSink { detachFeedback(); - if (sessionInvalidated) + if (isSessionInvalidated()) { invalidateNow(); }
