Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Bartel2014-10-01 03:02:23 +0000
committerJan Bartel2014-10-01 03:03:39 +0000
commit149ee0104705200eaa3a2bfe240c8dabbe921788 (patch)
treed06d9498c20a2b6060abc21c7a028e0565113169
parentd0fa66ddf0b13f754c6219120156fb66ab90268a (diff)
downloadorg.eclipse.jetty.project-149ee0104705200eaa3a2bfe240c8dabbe921788.tar.gz
org.eclipse.jetty.project-149ee0104705200eaa3a2bfe240c8dabbe921788.tar.xz
org.eclipse.jetty.project-149ee0104705200eaa3a2bfe240c8dabbe921788.zip
445157 First redeployed servlet leaks WebAppContext
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java15
-rw-r--r--jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java2
-rw-r--r--jetty-util/src/main/java/org/eclipse/jetty/util/thread/ScheduledExecutorScheduler.java14
3 files changed, 24 insertions, 7 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
index 53ccd6398e..5bcac2c285 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java
@@ -85,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);
+ }
}
}
}
@@ -111,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);
}
}
}
@@ -138,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)
{
@@ -148,7 +149,7 @@ public class HashSessionManager extends AbstractSessionManager
}
else
addBean(_timer,false);
-
+
super.doStart();
setScavengePeriod(getScavengePeriod());
@@ -177,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();
@@ -314,6 +318,7 @@ public class HashSessionManager extends AbstractSessionManager
_task.cancel();
_task = null;
}
+
_task = _timer.schedule(new Scavenger(),_scavengePeriodMs, TimeUnit.MILLISECONDS);
}
}
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
index 434cf9dfde..f633e5b93c 100644
--- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
+++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java
@@ -604,7 +604,7 @@ public class JDBCSessionIdManager extends AbstractSessionIdManager
finally
{
if (_scheduler != null && _scheduler.isRunning())
- _scheduler.schedule(this, _scavengeIntervalMs, TimeUnit.MILLISECONDS);
+ _task = _scheduler.schedule(this, _scavengeIntervalMs, TimeUnit.MILLISECONDS);
}
}
}
diff --git a/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ScheduledExecutorScheduler.java b/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ScheduledExecutorScheduler.java
index 5f8d62a65a..56da1041b7 100644
--- a/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ScheduledExecutorScheduler.java
+++ b/jetty-util/src/main/java/org/eclipse/jetty/util/thread/ScheduledExecutorScheduler.java
@@ -18,6 +18,7 @@
package org.eclipse.jetty.util.thread;
+import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
@@ -38,16 +39,23 @@ public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Sch
private final String name;
private final boolean daemon;
private volatile ScheduledThreadPoolExecutor scheduler;
+ private ClassLoader classloader;
public ScheduledExecutorScheduler()
{
this(null, false);
- }
+ }
public ScheduledExecutorScheduler(String name, boolean daemon)
{
+ this (name,daemon, Thread.currentThread().getContextClassLoader());
+ }
+
+ public ScheduledExecutorScheduler(String name, boolean daemon, ClassLoader threadFactoryClassLoader)
+ {
this.name = name == null ? "Scheduler-" + hashCode() : name;
this.daemon = daemon;
+ this.classloader = threadFactoryClassLoader;
}
@Override
@@ -60,6 +68,7 @@ public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Sch
{
Thread thread = new Thread(r, name);
thread.setDaemon(daemon);
+ thread.setContextClassLoader(classloader);
return thread;
}
});
@@ -67,6 +76,8 @@ public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Sch
super.doStart();
}
+
+
@Override
protected void doStop() throws Exception
{
@@ -81,6 +92,7 @@ public class ScheduledExecutorScheduler extends AbstractLifeCycle implements Sch
ScheduledFuture<?> result = scheduler.schedule(task, delay, unit);
return new ScheduledFutureTask(result);
}
+
private class ScheduledFutureTask implements Task
{

Back to the top