diff options
Diffstat (limited to 'jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java')
-rw-r--r-- | jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java index 907d2a050fb..38fa91b4831 100644 --- a/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java +++ b/jdisc_core/src/main/java/com/yahoo/jdisc/core/ActiveContainer.java @@ -18,12 +18,16 @@ import com.yahoo.jdisc.service.ServerProvider; import java.net.URI; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Logger; /** * @author Simon Thoresen + * @author bjorncs */ public class ActiveContainer extends AbstractResource implements CurrentContainer { + private static final Logger log = Logger.getLogger(ActiveContainer.class.getName()); + private final ContainerTermination termination; private final Injector guiceInjector; private final Iterable<ServerProvider> serverProviders; @@ -32,7 +36,7 @@ public class ActiveContainer extends AbstractResource implements CurrentContaine private final Map<String, BindingSet<RequestHandler>> clientBindings; private final BindingSetSelector bindingSetSelector; private final TimeoutManagerImpl timeoutMgr; - final Destructor destructor; + private final Destructor destructor; public ActiveContainer(ContainerBuilder builder) { serverProviders = builder.serverProviders().activate(); @@ -122,8 +126,19 @@ public class ActiveContainer extends AbstractResource implements CurrentContaine return new ContainerSnapshot(this, serverBindings, clientBindings); } + // TODO Rewrite to use cleaners after Java 9 migration + @Override + protected void finalize() throws Throwable { + boolean alreadyDestructed = destructor.destruct(); + if (!alreadyDestructed) { + log.severe(toString() + " was not correctly cleaned up " + + "because of a resource leak or invalid use of reference counting."); + } + super.finalize(); + } + // NOTE: An instance of this class must never contain a reference to the outer class (ActiveContainer). - static class Destructor { + private static class Destructor { private final ResourcePool resourceReferences; private final TimeoutManagerImpl timeoutMgr; private final ContainerTermination termination; |