408077 HashSessionManager leaves file handles open after being stopped
This commit is contained in:
parent
8a1ea2f69c
commit
51c1017b3d
|
@ -37,6 +37,7 @@ import javax.servlet.ServletContext;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.eclipse.jetty.server.handler.ContextHandler;
|
import org.eclipse.jetty.server.handler.ContextHandler;
|
||||||
|
import org.eclipse.jetty.util.IO;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
@ -520,8 +521,7 @@ public class HashSessionManager extends AbstractSessionManager
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
if (in != null)
|
if (in != null) IO.close(in);
|
||||||
try {in.close();} catch (Exception x) {__log.ignore(x);}
|
|
||||||
|
|
||||||
if (error != null)
|
if (error != null)
|
||||||
{
|
{
|
||||||
|
@ -568,6 +568,8 @@ public class HashSessionManager extends AbstractSessionManager
|
||||||
* defaultReadObject
|
* defaultReadObject
|
||||||
*/
|
*/
|
||||||
DataInputStream in = new DataInputStream(is);
|
DataInputStream in = new DataInputStream(is);
|
||||||
|
try
|
||||||
|
{
|
||||||
String clusterId = in.readUTF();
|
String clusterId = in.readUTF();
|
||||||
in.readUTF(); // nodeId
|
in.readUTF(); // nodeId
|
||||||
long created = in.readLong();
|
long created = in.readLong();
|
||||||
|
@ -581,18 +583,27 @@ public class HashSessionManager extends AbstractSessionManager
|
||||||
if (size>0)
|
if (size>0)
|
||||||
{
|
{
|
||||||
ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in);
|
ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in);
|
||||||
|
try
|
||||||
|
{
|
||||||
for (int i=0; i<size;i++)
|
for (int i=0; i<size;i++)
|
||||||
{
|
{
|
||||||
String key = ois.readUTF();
|
String key = ois.readUTF();
|
||||||
Object value = ois.readObject();
|
Object value = ois.readObject();
|
||||||
session.setAttribute(key,value);
|
session.setAttribute(key,value);
|
||||||
}
|
}
|
||||||
ois.close();
|
|
||||||
}
|
}
|
||||||
else
|
finally
|
||||||
in.close();
|
{
|
||||||
|
IO.close(ois);
|
||||||
|
}
|
||||||
|
}
|
||||||
return session;
|
return session;
|
||||||
}
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
IO.close(in);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
|
|
|
@ -121,6 +121,7 @@ public class HashedSession extends AbstractSession
|
||||||
fos = new FileOutputStream(file);
|
fos = new FileOutputStream(file);
|
||||||
willPassivate();
|
willPassivate();
|
||||||
save(fos);
|
save(fos);
|
||||||
|
IO.close(fos);
|
||||||
if (reactivate)
|
if (reactivate)
|
||||||
didActivate();
|
didActivate();
|
||||||
else
|
else
|
||||||
|
@ -129,17 +130,12 @@ public class HashedSession extends AbstractSession
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
saveFailed(); // We won't try again for this session
|
saveFailed(); // We won't try again for this session
|
||||||
if (fos != null)
|
if (fos != null) IO.close(fos);
|
||||||
{
|
if (file != null) file.delete(); // No point keeping the file if we didn't save the whole session
|
||||||
// Must not leave the file open if the saving failed
|
|
||||||
IO.close(fos);
|
|
||||||
// No point keeping the file if we didn't save the whole session
|
|
||||||
file.delete();
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public synchronized void save(OutputStream os) throws IOException
|
public synchronized void save(OutputStream os) throws IOException
|
||||||
{
|
{
|
||||||
|
@ -192,6 +188,7 @@ public class HashedSession extends AbstractSession
|
||||||
fis = new FileInputStream(file);
|
fis = new FileInputStream(file);
|
||||||
_idled = false;
|
_idled = false;
|
||||||
_hashSessionManager.restoreSession(fis, this);
|
_hashSessionManager.restoreSession(fis, this);
|
||||||
|
IO.close(fis);
|
||||||
|
|
||||||
didActivate();
|
didActivate();
|
||||||
|
|
||||||
|
@ -202,7 +199,7 @@ public class HashedSession extends AbstractSession
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
LOG.warn("Problem de-idling session " + super.getId(), e);
|
LOG.warn("Problem de-idling session " + super.getId(), e);
|
||||||
IO.close(fis);
|
if (fis != null) IO.close(fis);//Must ensure closed before invalidate
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue