This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 4a7efbff1 [SCB-2796]fix running not set problem
4a7efbff1 is described below

commit 4a7efbff10a05415f72b670531aa7a5b5f4e71ca
Author: liubao <[email protected]>
AuthorDate: Fri Jun 16 14:19:04 2023 +0800

    [SCB-2796]fix running not set problem
---
 .../servicecomb/serviceregistry/RegistryUtils.java   | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
index fe16cd4b6..72022f6a1 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/RegistryUtils.java
@@ -22,6 +22,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Consumer;
 import java.util.function.Function;
@@ -68,7 +69,7 @@ public final class RegistryUtils {
    */
   private static volatile ServiceRegistry serviceRegistry;
 
-  private static volatile boolean running = false;
+  private static AtomicBoolean running = new AtomicBoolean(false);
 
   private static final Map<String, ServiceRegistry> EXTRA_SERVICE_REGISTRIES = 
new LinkedHashMap<>();
 
@@ -121,19 +122,20 @@ public final class RegistryUtils {
   }
 
   public static void run() {
-    if (running) {
-      if (DynamicPropertyFactory.getInstance()
-          
.getBooleanProperty(SERVICECOMB_SERVICE_REGISTRY_REPEATED_INITIALIZATION_ALLOWED,
 false).get()) {
-        return;
-      }
-      throw new IllegalStateException("Registry has already bean initialized 
and not allowed to initialize twice.");
+    if (running.compareAndSet(false, true)) {
+      executeOnEachServiceRegistry(ServiceRegistry::run);
+      return;
+    }
+    if (DynamicPropertyFactory.getInstance()
+        
.getBooleanProperty(SERVICECOMB_SERVICE_REGISTRY_REPEATED_INITIALIZATION_ALLOWED,
 false).get()) {
+      return;
     }
-    executeOnEachServiceRegistry(ServiceRegistry::run);
+    throw new IllegalStateException("Registry has already bean initialized and 
not allowed to initialize twice.");
   }
 
   public static void destroy() {
+    running.set(false);
     executeOnEachServiceRegistry(ServiceRegistry::destroy);
-    running = false;
     if (serviceRegistry != null) {
       serviceRegistry = null;
     }

Reply via email to