Repository: wicket Updated Branches: refs/heads/wicket-6.x d0967b231 -> 35b93814a
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/35b93814 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/35b93814 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/35b93814 Branch: refs/heads/wicket-6.x Commit: 35b93814a6c89ad048b29445c963649861e809a0 Parents: d0967b2 Author: Emond Papegaaij <[email protected]> Authored: Mon Feb 5 14:10:21 2018 +0100 Committer: Emond Papegaaij <[email protected]> Committed: Mon Feb 5 15:47:52 2018 +0100 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Session.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/35b93814/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 5bab1c6..21a9432 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Session.java +++ b/wicket-core/src/main/java/org/apache/wicket/Session.java @@ -115,6 +115,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"; @@ -193,9 +199,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. @@ -510,7 +513,7 @@ public abstract class Session implements IClusterable, IEventSink */ public void invalidate() { - sessionInvalidated = true; + RequestCycle.get().setMetaData(SESSION_INVALIDATED, true); } /** @@ -523,6 +526,7 @@ public abstract class Session implements IClusterable, IEventSink sessionStore.invalidate(RequestCycle.get().getRequest()); sessionStore = null; id = null; + RequestCycle.get().setMetaData(SESSION_INVALIDATED, false); } } @@ -561,7 +565,7 @@ public abstract class Session implements IClusterable, IEventSink */ public final boolean isSessionInvalidated() { - return sessionInvalidated; + return Boolean.TRUE.equals(RequestCycle.get().getMetaData(SESSION_INVALIDATED)); } /** @@ -675,7 +679,7 @@ public abstract class Session implements IClusterable, IEventSink { detachFeedback(); - if (sessionInvalidated) + if (isSessionInvalidated()) { invalidateNow(); }
