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