Author: sshafroi
Date: 2008-11-12 11:06:03 +0100 (Wed, 12 Nov 2008)
New Revision: 6925

Modified:
   trunk/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
Log:
The request stack in SiteLocatorFilter was not protected with a try finally 
stack.pop. This would when things goes wrong further down the track, lead to a 
memory leak, and a user that will be locked out, until he gets a new session or 
server is restarted.


Modified: 
trunk/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java
===================================================================
--- trunk/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java 
2008-11-12 09:38:08 UTC (rev 6924)
+++ trunk/war/src/main/java/no/sesat/search/http/filters/SiteLocatorFilter.java 
2008-11-12 10:06:03 UTC (rev 6925)
@@ -405,28 +405,31 @@
                     ((HttpServletResponse) 
response).sendError(HttpServletResponse.SC_CONFLICT);
                 }
             } else {
+                long start = System.currentTimeMillis();
                 stack.push(request);
-
-                long start = System.currentTimeMillis();
                 synchronized (session) {
-                    long timeLeft = WAIT_TIME - (System.currentTimeMillis() - 
start);
-                    while (stack.peek() != request && timeLeft > 0) {
-                        try {
-                            session.wait(timeLeft);
-                            timeLeft = WAIT_TIME - (System.currentTimeMillis() 
- start);
-                        } catch (InterruptedException e) {
-                            LOG.error(e);
-                            timeLeft = -1;
+                    try {
+                        long timeLeft = WAIT_TIME - 
(System.currentTimeMillis() - start);
+                        while (stack.peek() != request && timeLeft > 0) {
+                            try {
+                                session.wait(timeLeft);
+                                timeLeft = WAIT_TIME - 
(System.currentTimeMillis() - start);
+                            } catch (InterruptedException e) {
+                                LOG.error(e);
+                                timeLeft = -1;
+                            }
                         }
+                        if (timeLeft >= 0) {
+                            chain.doFilter(request, response);
+                        } else {
+                            LOG.warn(" -- response 409 (Timeout: Waited " + 
(WAIT_TIME - timeLeft) + " ms. )");
+                            ((HttpServletResponse) 
response).sendError(HttpServletResponse.SC_CONFLICT);
+                        }
                     }
-                    if (timeLeft >= 0) {
-                        chain.doFilter(request, response);
-                    } else {
-                        LOG.warn(" -- response 409 (Timeout: Waited " + 
(WAIT_TIME - timeLeft) + " ms. )");
-                        ((HttpServletResponse) 
response).sendError(HttpServletResponse.SC_CONFLICT);
+                    finally {
+                        stack.pop();
+                        session.notifyAll();
                     }
-                    stack.pop();
-                    session.notifyAll();
                 }
             }
         } else {

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to