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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6dc59255dc [FIX] Fix IllegalThreadStateException in ComponentStarter 
shutdown hook (#4733)
6dc59255dc is described below

commit 6dc59255dc99745c0645374cd3b69d8d26de17ce
Author: Matteo Merli <[email protected]>
AuthorDate: Thu Mar 26 17:45:12 2026 -0700

    [FIX] Fix IllegalThreadStateException in ComponentStarter shutdown hook 
(#4733)
    
    The UncaughtExceptionHandler in ComponentStarter calls
    shutdownHookThread.start(), but this can throw IllegalThreadStateException
    if the thread was already started by a prior exception or by the JVM
    shutdown sequence. This exception propagates out of the handler, causing
    the JVM to print "Exception thrown from the UncaughtExceptionHandler"
    on the BookieDeathWatcher thread.
    
    Catch IllegalThreadStateException since it simply means shutdown is
    already in progress.
---
 .../org/apache/bookkeeper/common/component/ComponentStarter.java   | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git 
a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
 
b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
index d1cb08163c..b8dfced36d 100644
--- 
a/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
+++ 
b/bookkeeper-common/src/main/java/org/apache/bookkeeper/common/component/ComponentStarter.java
@@ -76,7 +76,12 @@ public class ComponentStarter {
                     component.getName(), t, e);
             System.err.println(e.getMessage());
             // start the shutdown hook when an uncaught exception happen in 
the lifecycle component.
-            shutdownHookThread.start();
+            try {
+                shutdownHookThread.start();
+            } catch (IllegalThreadStateException ise) {
+                // the shutdown hook thread is already running (e.g. triggered 
by a prior
+                // exception or by the JVM shutdown sequence), so there is 
nothing else to do.
+            }
         });
 
         component.publishInfo(new ComponentInfoPublisher());

Reply via email to