RFR: 8318839: Update test thread factory to catch all exceptions

Leonid Mesnik lmesnik at openjdk.org
Fri Oct 27 16:19:30 UTC 2023


On Fri, 27 Oct 2023 05:55:43 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> It is still used in tests and we should ignore it like jtreg doing.
>
> Shouldn't this code first retrieve the current default exception handler, and then check whether t is a virtual thread, and if so handle the exception as appropriate (not sure System.exit is appropriate ..). Then for non-virtual threads it delegates to the previous default handler.
> 
> final UncaughtExceptionHandler originalUEH = Thread.getDefaultUncaughtExceptionHandler();
> Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
>         if (t.isVirtual()) {
>             // ...
>         } else {
>             originalUEH.uncaughtException(t, e);
>         }
> });

There shouldn't be an original UHE. jtreg doesn't set it. The goal is to add this handler for all threads, not only virtual. 
Please note, that it is planned to add it only until the similar problem in jtreg is completely fixed. 
I thought to add something like 

Thread.setDefaultUncaughtExceptionHandler((t, e) -> {
  UHE.ecxeptionThrown = e;
}

...

 @Override
    public Thread newThread(Runnable task) {
        return VIRTUAL_TF.newThread(new Runnable() -> {
                task.run();
                if (UHE.ecxeptionThrown != null) {
                         throw new RuntimeException(UHE.ecxeptionThrown);
                }
            );
    }
}


So test actually throws exceptions. It might miss exceptions for threads that finish later than the main thread. but might it is ok.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16369#discussion_r1374790707


More information about the core-libs-dev mailing list