X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fserver%2Fsession%2FHashSessionManager.java;h=33962329f7331b3dd67fbe92f1a189cb192ef854;hp=1effd32f94b87979200addce4ad7c50eb94bba49;hb=ba4f228fa9f72d50991a2218cfd83987ef5d385e;hpb=875b5e9651498a0cd8e0001c0742ba843e47cad0 diff --git a/lib/jetty/org/eclipse/jetty/server/session/HashSessionManager.java b/lib/jetty/org/eclipse/jetty/server/session/HashSessionManager.java index 1effd32f..33962329 100644 --- a/lib/jetty/org/eclipse/jetty/server/session/HashSessionManager.java +++ b/lib/jetty/org/eclipse/jetty/server/session/HashSessionManager.java @@ -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