Bug 8662 RefreshingSCPModuleInfoRegistry synchronized 28/58728/2
authorMichael Vorburger <vorburger@redhat.com>
Mon, 12 Jun 2017 11:16:26 +0000 (13:16 +0200)
committerTom Pantelis <tompantelis@gmail.com>
Mon, 12 Jun 2017 18:11:11 +0000 (18:11 +0000)
Looks like (as seen on Bug 8662) there can be race conditions between
RefreshingSCPModuleInfoRegistry's updateService() and close() ... The
NPE in that bug on the "osgiReg" happens even if though that's guarded
inside a if (this.osgiReg != null), but it's during shutdown, so
presumably it JUST got set to null in close() ?  A "synchronized" on
both methods should prevent that.

Change-Id: I607092e3174c2fd0447d8548f4933624acd6a29b
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
opendaylight/config/config-manager/src/main/java/org/opendaylight/controller/config/manager/impl/osgi/mapping/RefreshingSCPModuleInfoRegistry.java

index 6217476..fcde347 100644 (file)
@@ -51,8 +51,8 @@ public class RefreshingSCPModuleInfoRegistry implements ModuleInfoRegistry, Auto
             .registerService(SchemaContextProvider.class, schemaContextProvider, new Hashtable<String, String>());
     }
 
-    public void updateService() {
-        if(this.osgiReg != null) {
+    public synchronized void updateService() {
+        if (this.osgiReg != null) {
             try {
                 this.bindingContextProvider.update(this.classLoadingStrat, this.schemaContextProvider);
 
@@ -75,8 +75,8 @@ public class RefreshingSCPModuleInfoRegistry implements ModuleInfoRegistry, Auto
     }
 
     @Override
-    public void close() throws Exception {
-        if(this.osgiReg != null) {
+    public synchronized void close() throws Exception {
+        if (this.osgiReg != null) {
             this.osgiReg.unregister();
         }
 

©2013 OpenDaylight, A Linux Foundation Collaborative Project. All Rights Reserved.
OpenDaylight is a registered trademark of The OpenDaylight Project, Inc.
Linux Foundation and OpenDaylight are registered trademarks of the Linux Foundation.
Linux is a registered trademark of Linus Torvalds.