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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 3a1e5cc678 ISIS-3066: wait for validation to finish before MM disposal
3a1e5cc678 is described below

commit 3a1e5cc678d569735190a60fb42c4d24849f856c
Author: Andi Huber <[email protected]>
AuthorDate: Thu Jun 2 09:08:08 2022 +0200

    ISIS-3066: wait for validation to finish before MM disposal
---
 .../metamodel/specloader/SpecificationLoaderDefault.java  | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index 57c4aafee1..10194f040d 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -86,6 +86,7 @@ import 
org.apache.isis.core.metamodel.valuetypes.ValueSemanticsResolverDefault;
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
+import lombok.SneakyThrows;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -334,6 +335,7 @@ public class SpecificationLoaderDefault implements 
SpecificationLoader {
 
     @Override
     public void disposeMetaModel() {
+        waitForValidationToFinish();
         logicalTypeResolver.clear();
         cache.clear();
         validationResult.clear();
@@ -341,6 +343,19 @@ public class SpecificationLoaderDefault implements 
SpecificationLoader {
         log.info("Metamodel disposed.");
     }
 
+    /**
+     * [ISIS-3066] wait for validation (if any) to finish (max 5s)
+     */
+    @SneakyThrows
+    private void waitForValidationToFinish() {
+        int maxRetry = 50;
+        while(!validationQueue.isEmpty()
+                && maxRetry<0) {
+            Thread.sleep(100);
+            --maxRetry;
+        }
+    }
+
     @PreDestroy
     public void shutdown() {
         log.debug("shutting down {}", this);

Reply via email to