You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by st...@apache.org on 2015/05/06 11:13:56 UTC

[15/25] tomee git commit: TOMEE-1577 synchronizing httpsessionimpl invalidate

TOMEE-1577 synchronizing httpsessionimpl invalidate


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/10280fab
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/10280fab
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/10280fab

Branch: refs/heads/fb_tomee2_owb16
Commit: 10280fab2fdf8b452bf44db81d1b7bdeb9096571
Parents: 64febe3
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Tue May 5 09:49:47 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Tue May 5 09:49:47 2015 +0200

----------------------------------------------------------------------
 .../openejb/server/httpd/HttpSessionImpl.java   | 34 +++++++++++++-------
 1 file changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/10280fab/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
index f82b7bf..104deb5 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
@@ -40,6 +40,7 @@ public class HttpSessionImpl implements HttpSession {
     private final long created = System.currentTimeMillis();
     private volatile long timeout;
     private volatile long lastAccessed = created;
+    private volatile boolean valid = true;
 
     public HttpSessionImpl(final String contextPath, final long timeout) {
         this.timeout = timeout;
@@ -91,20 +92,31 @@ public class HttpSessionImpl implements HttpSession {
 
     @Override
     public void invalidate() {
-        if (!listeners.isEmpty()) {
-            final HttpSessionEvent event = new HttpSessionEvent(this);
-            for (final HttpSessionListener o : listeners) {
-                try {
-                    HttpSessionListener.class.cast(o).sessionDestroyed(event);
-                } catch (final Throwable th) {
-                    // ignore, may be undeployed
+        if (!valid) {
+            return;
+        }
+
+        synchronized (this) {
+            if (!valid) {
+                return;
+            }
+
+            if (!listeners.isEmpty()) {
+                final HttpSessionEvent event = new HttpSessionEvent(this);
+                for (final HttpSessionListener o : listeners) {
+                    try {
+                        HttpSessionListener.class.cast(o).sessionDestroyed(event);
+                    } catch (final Throwable th) {
+                        // ignore, may be undeployed
+                    }
                 }
             }
-        }
 
-        final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
-        if (sessionManager != null) {
-            sessionManager.removeSession(sessionId);
+            final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
+            if (sessionManager != null) {
+                sessionManager.removeSession(sessionId);
+            }
+            valid = false;
         }
     }