On 18/07/2024 12:27, Konstantin Kolinko wrote:
чт, 18 июл. 2024 г. в 11:42, <ma...@apache.org>:

<snip/>

@@ -287,6 +312,28 @@ public final class Library {
          return initialize();
      }

+
+    public static boolean tryCleanUpLock(long cleanupGeneration) {
+        try {
+            boolean result = cleanUpLock.readLock().tryLock(0, 
TimeUnit.SECONDS);
+            if (result &&  generation.get() == cleanupGeneration) {
+                return true;
+            }
+            cleanUpLock.readLock().unlock();
+        } catch (InterruptedException e) {
+            // Treated the same way as not getting the lock
+        }
+        return false;
+    }

Mark,

I think there is a bug with the "readLock().unlock()" call above. It
should be called only when the "result" of preceding tryLock() is
true.

Calling unlock() when no lock is held results in an
IllegalMonitorStateException. [1]

I see that this code is present on the 9.0.x branch only (and not on
the 10.1.x and main branches).

[1] 
https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html

Thanks for the review. I've fixed this in 9.0.x. This will get picked up for Tomcat Native for 1.3.2 onwards.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to