summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2017-03-06 09:48:54 +0100
committerJon Bratseth <bratseth@yahoo-inc.com>2017-03-06 09:48:54 +0100
commit9dd4c4880b42dd17c3bbaf1662eee9d8bbcad748 (patch)
treef9e8639fd015093c033c189bc00c94a2bac2087b /container-core
parent351903b75e5cf8feaa6606c139ee56e1caeccd23 (diff)
Shutdown renderer threads on deconstruct
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/ConfigHack.java2
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java2
-rw-r--r--container-core/src/main/java/com/yahoo/processing/rendering/AsynchronousSectionedRenderer.java13
3 files changed, 14 insertions, 3 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/ConfigHack.java b/container-core/src/main/java/com/yahoo/container/ConfigHack.java
index 49965d0621d..b4900649cd2 100644
--- a/container-core/src/main/java/com/yahoo/container/ConfigHack.java
+++ b/container-core/src/main/java/com/yahoo/container/ConfigHack.java
@@ -14,6 +14,7 @@ import com.yahoo.container.config.StatisticsEmitter;
* @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
*/
public final class ConfigHack {
+
private volatile StatisticsEmitter statisticsEmitter = new StatisticsEmitter();
public static final String TILED_TEMPLATE = "tiled";
@@ -26,4 +27,5 @@ public final class ConfigHack {
public void setStatisticsEmitter(StatisticsEmitter statisticsEmitter) {
this.statisticsEmitter = statisticsEmitter;
}
+
}
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
index af478748eeb..6ec978d39a3 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
@@ -25,7 +25,7 @@ import java.util.concurrent.Executor;
* A request handler base class extending the features of
* ThreadedHttpRequestHandler with access logging.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
*/
public abstract class LoggingRequestHandler extends ThreadedHttpRequestHandler {
diff --git a/container-core/src/main/java/com/yahoo/processing/rendering/AsynchronousSectionedRenderer.java b/container-core/src/main/java/com/yahoo/processing/rendering/AsynchronousSectionedRenderer.java
index 3980ec80423..b54757cac50 100644
--- a/container-core/src/main/java/com/yahoo/processing/rendering/AsynchronousSectionedRenderer.java
+++ b/container-core/src/main/java/com/yahoo/processing/rendering/AsynchronousSectionedRenderer.java
@@ -114,6 +114,8 @@ public abstract class AsynchronousSectionedRenderer<RESPONSE extends Response> e
// We should complete any work we have already started so use an unbounded queue.
// The executor SHOULD be reused across all instances having the same prototype
private final Executor renderingExecutor;
+ // The executor may either be created (and thus owned) by this, or passed by injection
+ private final boolean renderingExecutorIsOwned;
private static ThreadPoolExecutor createExecutor() {
int threadCount = Runtime.getRuntime().availableProcessors();
@@ -150,7 +152,14 @@ public abstract class AsynchronousSectionedRenderer<RESPONSE extends Response> e
*/
public AsynchronousSectionedRenderer(Executor executor) {
isInitialized = false;
- renderingExecutor = executor==null ? createExecutor() : executor;
+ if (executor == null) {
+ renderingExecutor = createExecutor();
+ renderingExecutorIsOwned = true;
+ }
+ else {
+ renderingExecutor = executor;
+ renderingExecutorIsOwned = false;
+ }
}
/**
@@ -184,7 +193,7 @@ public abstract class AsynchronousSectionedRenderer<RESPONSE extends Response> e
@Override
public void deconstruct() {
super.deconstruct();
- if (renderingExecutor instanceof ThreadPoolExecutor)
+ if (renderingExecutorIsOwned && renderingExecutor instanceof ThreadPoolExecutor)
shutdown((ThreadPoolExecutor) renderingExecutor);
}