]> WPIA git - gigi.git/blobdiff - lib/jetty/org/eclipse/jetty/server/session/HashSessionManager.java
updating jetty to jetty-9.2.16.v2016040
[gigi.git] / lib / jetty / org / eclipse / jetty / server / session / HashSessionManager.java
index 1effd32f94b87979200addce4ad7c50eb94bba49..33962329f7331b3dd67fbe92f1a189cb192ef854 100644 (file)
@@ -1,6 +1,6 @@
 //
 //  ========================================================================
-//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+//  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
 //  ------------------------------------------------------------------------
 //  All rights reserved. This program and the accompanying materials
 //  are made available under the terms of the Eclipse Public License v1.0
@@ -19,7 +19,6 @@
 package org.eclipse.jetty.server.session;
 
 import java.io.DataInputStream;
-import java.io.EOFException;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -34,10 +33,8 @@ import java.util.concurrent.TimeUnit;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 
-import org.eclipse.jetty.server.SessionIdManager;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.util.ClassLoadingObjectInputStream;
-import org.eclipse.jetty.util.IO;
 import org.eclipse.jetty.util.log.Logger;
 import org.eclipse.jetty.util.thread.ScheduledExecutorScheduler;
 import org.eclipse.jetty.util.thread.Scheduler;
@@ -88,8 +85,9 @@ public class HashSessionManager extends AbstractSessionManager
             }
             finally
             {
-                if (_timer != null && _timer.isRunning())
-                    _timer.schedule(this, _scavengePeriodMs, TimeUnit.MILLISECONDS);
+                if (_timer != null && _timer.isRunning()) {
+                    _task = _timer.schedule(this, _scavengePeriodMs, TimeUnit.MILLISECONDS);
+                }
             }
         }
     }
@@ -114,7 +112,7 @@ public class HashSessionManager extends AbstractSessionManager
             finally
             {
                 if (_timer != null && _timer.isRunning())
-                    _timer.schedule(this, _savePeriodMs, TimeUnit.MILLISECONDS);
+                    _saveTask = _timer.schedule(this, _savePeriodMs, TimeUnit.MILLISECONDS);
             }
         }        
     }
@@ -141,7 +139,7 @@ public class HashSessionManager extends AbstractSessionManager
             ServletContext context = ContextHandler.getCurrentContext();
             if (context!=null)
                 _timer = (Scheduler)context.getAttribute("org.eclipse.jetty.server.session.timer");   
-        }         
+        }    
       
         if (_timer == null)
         {
@@ -151,7 +149,7 @@ public class HashSessionManager extends AbstractSessionManager
         }
         else
             addBean(_timer,false);
-            
+        
         super.doStart();
 
         setScavengePeriod(getScavengePeriod());
@@ -180,12 +178,15 @@ public class HashSessionManager extends AbstractSessionManager
         {
             if (_saveTask!=null)
                 _saveTask.cancel();
+
             _saveTask=null;
             if (_task!=null)
                 _task.cancel();
+
             _task=null;
             _timer=null;
         }
+       
 
         // This will callback invalidate sessions - where we decide if we will save
         super.doStop();
@@ -308,15 +309,16 @@ public class HashSessionManager extends AbstractSessionManager
 
         _scavengePeriodMs=period;
     
-        if (_timer!=null && (period!=old_period || _task==null))
+        synchronized (this)
         {
-            synchronized (this)
+            if (_timer!=null && (period!=old_period || _task==null))
             {
                 if (_task!=null)
                 {
                     _task.cancel();
                     _task = null;
                 }
+
                 _task = _timer.schedule(new Scavenger(),_scavengePeriodMs, TimeUnit.MILLISECONDS);
             }
         }
@@ -569,18 +571,22 @@ public class HashSessionManager extends AbstractSessionManager
     {        
         File file = new File(_storeDir,idInCuster);
 
-        FileInputStream in = null;
         Exception error = null;
-        try
+        if (!file.exists())
         {
-            if (file.exists())
+            if (LOG.isDebugEnabled())
             {
-                in = new FileInputStream(file);
-                HashedSession session = restoreSession(in, null);
-                addSession(session, false);
-                session.didActivate();
-                return session;
+                LOG.debug("Not loading: {}",file);
             }
+            return null;
+        }
+        
+        try (FileInputStream in = new FileInputStream(file))
+        {
+            HashedSession session = restoreSession(in,null);
+            addSession(session,false);
+            session.didActivate();
+            return session;
         }
         catch (Exception e)
         {
@@ -588,8 +594,6 @@ public class HashSessionManager extends AbstractSessionManager
         }
         finally
         {
-            if (in != null) IO.close(in);
-            
             if (error != null)
             {
                 if (isDeleteUnrestorableSessions() && file.exists() && file.getParentFile().equals(_storeDir) )
@@ -603,7 +607,10 @@ public class HashSessionManager extends AbstractSessionManager
                 }
             }
             else
-               file.delete(); //delete successfully restored file
+            {
+                // delete successfully restored file
+                file.delete();
+            }
         }
         return null;
     }
@@ -641,8 +648,10 @@ public class HashSessionManager extends AbstractSessionManager
 
         if (session == null)
             session = (HashedSession)newSession(created, accessed, clusterId);
+        
         session.setRequests(requests);
 
+        // Attributes
         int size = di.readInt();
 
         restoreSessionAttributes(di, size, session);
@@ -652,7 +661,7 @@ public class HashSessionManager extends AbstractSessionManager
             int maxIdle = di.readInt();
             session.setMaxInactiveInterval(maxIdle);
         }
-        catch (EOFException e)
+        catch (IOException e)
         {
             LOG.debug("No maxInactiveInterval persisted for session "+clusterId);
             LOG.ignore(e);
@@ -661,12 +670,14 @@ public class HashSessionManager extends AbstractSessionManager
         return session;
     }
 
-    
+
+    @SuppressWarnings("resource")
     private void restoreSessionAttributes (InputStream is, int size, HashedSession session)
     throws Exception
     {
         if (size>0)
         {
+            // input stream should not be closed here
             ClassLoadingObjectInputStream ois =  new ClassLoadingObjectInputStream(is);
             for (int i=0; i<size;i++)
             {