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

albumenj pushed a commit to branch 3.1
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.1 by this push:
     new ba14a201e7 Sync when destroy (#11783)
ba14a201e7 is described below

commit ba14a201e71dbf0267d411943db30f69840d51b5
Author: Albumen Kevin <[email protected]>
AuthorDate: Fri Mar 10 17:11:17 2023 +0800

    Sync when destroy (#11783)
---
 .../org/apache/dubbo/rpc/model/ScopeModel.java     | 30 ++++++++++++----------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java 
b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
index b83f96f46f..e066952528 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/rpc/model/ScopeModel.java
@@ -110,21 +110,23 @@ public abstract class ScopeModel implements 
ExtensionAccessor {
     }
 
     public void destroy() {
-        if (destroyed.compareAndSet(false, true)) {
-            try {
-                onDestroy();
-                HashSet<ClassLoader> copyOfClassLoaders = new 
HashSet<>(classLoaders);
-                for (ClassLoader classLoader : copyOfClassLoaders) {
-                    removeClassLoader(classLoader);
-                }
-                if (beanFactory != null) {
-                    beanFactory.destroy();
-                }
-                if (extensionDirector != null) {
-                    extensionDirector.destroy();
+        synchronized (instLock) {
+            if (destroyed.compareAndSet(false, true)) {
+                try {
+                    onDestroy();
+                    HashSet<ClassLoader> copyOfClassLoaders = new 
HashSet<>(classLoaders);
+                    for (ClassLoader classLoader : copyOfClassLoaders) {
+                        removeClassLoader(classLoader);
+                    }
+                    if (beanFactory != null) {
+                        beanFactory.destroy();
+                    }
+                    if (extensionDirector != null) {
+                        extensionDirector.destroy();
+                    }
+                } catch (Throwable t) {
+                    LOGGER.error(CONFIG_UNABLE_DESTROY_MODEL, "", "", "Error 
happened when destroying ScopeModel.", t);
                 }
-            } catch (Throwable t) {
-                LOGGER.error(CONFIG_UNABLE_DESTROY_MODEL, "", "", "Error 
happened when destroying ScopeModel.", t);
             }
         }
     }

Reply via email to