From d4a83ae529ca765205eef17fbd891a482d17d793 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 18 Jul 2018 15:17:09 +0200 Subject: [PATCH] Harden DOMRpcRouter shutdown Use AbstractRegistration to get idempotenence. Also remove listener register prior to shutting down the listener notifier. JIRA: MDSAL-283 Change-Id: I948510a080c2540d309f81fa8a42591341db595e Signed-off-by: Robert Varga --- .../opendaylight/mdsal/dom/broker/DOMRpcRouter.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java index fe3acf8a8f..e725192e39 100644 --- a/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java +++ b/dom/mdsal-dom-broker/src/main/java/org/opendaylight/mdsal/dom/broker/DOMRpcRouter.java @@ -42,6 +42,7 @@ import org.opendaylight.mdsal.dom.api.DOMRpcService; import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.spi.AbstractDOMRpcImplementationRegistration; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; +import org.opendaylight.yangtools.concepts.AbstractRegistration; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @@ -49,7 +50,8 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; import org.opendaylight.yangtools.yang.model.api.SchemaPath; -public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcProviderService, SchemaContextListener { +public final class DOMRpcRouter extends AbstractRegistration implements DOMRpcService, DOMRpcProviderService, + SchemaContextListener { private static final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat( "DOMRpcRouter-listener-%s").setDaemon(true).build(); @@ -142,13 +144,14 @@ public final class DOMRpcRouter implements AutoCloseable, DOMRpcService, DOMRpcP routingTable = newTable; } - @Override - public void close() { - listenerNotifier.shutdown(); + @Override + protected void removeRegistration() { if (listenerRegistration != null) { listenerRegistration.close(); + listenerRegistration = null; } + listenerNotifier.shutdown(); } @VisibleForTesting -- 2.36.6