ShutdownHandlerImpl: remove registered components after shutdown is performed 14/11014/1
authorMarek Gradzki <mgradzki@cisco.com>
Wed, 7 Mar 2018 14:25:17 +0000 (15:25 +0100)
committerMarek Gradzki <mgradzki@cisco.com>
Wed, 7 Mar 2018 14:26:18 +0000 (15:26 +0100)
Prevents invoking AutoCloseable.close(), which might not be idempotent.

Change-Id: Id28200fb68a4c6e38878cf4f0b8aaee298dbc37b
Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
infra/impl/src/main/java/io/fd/honeycomb/impl/ShutdownHandlerImpl.java

index f622a60..d7fd78a 100644 (file)
@@ -20,9 +20,11 @@ import io.fd.honeycomb.data.init.ShutdownHandler;
 import java.util.Deque;
 import java.util.LinkedList;
 import javax.annotation.Nonnull;
+import javax.annotation.concurrent.NotThreadSafe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@NotThreadSafe
 public final class ShutdownHandlerImpl implements ShutdownHandler {
 
     private static final Logger LOG = LoggerFactory.getLogger(ShutdownHandlerImpl.class);
@@ -70,5 +72,8 @@ public final class ShutdownHandlerImpl implements ShutdownHandler {
                 LOG.warn("Unable to close component {}", closeable.getName(), e);
             }
         });
+        // AutoCloseable.close() might not be idempotent, so remove registered components
+        // to prevent multiple invocations:
+        components.clear();
     }
 }