You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ignore exceptions thrown from Thread.UncaughtExceptionHandler (#4525)
Fixes#4516
Background
----------
Whenever an *uncaught* exception happens in a coroutine,
it gets reported to the `CoroutineExceptionHandler`.
See <https://kotlinlang.org/docs/exception-handling.html#coroutineexceptionhandler>.
However, if it's not installed, a platform-specific handler
is used.
On the JVM, this means invoking the thread's
`UncaughtExceptionHandler`, which logs the exception to the console
by default, but can be configured to do other things
(for example, on Android, it will crash the application).
Problem
-------
User-specified `UncaughtExceptionHandler` instances are allowed to
throw exceptions.
Java's documentation says so
(https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Thread.UncaughtExceptionHandler.html):
> Any exception thrown by this method will be ignored by the Java Virtual Machine.
This means a user is allowed to write a throwing
`UncaughtExceptionHandler`, and the caller has to deal with it.
In our implementation, however, we are simply invoking the
exception handler as a plain function, and if that function
throws an exception, we allow this exception to propagate
to the coroutine machinery, causing it to fail.
Solution
--------
To comply with the contract defined for `UncaughtExceptionHandler`,
we also ignore the exceptions thrown from there.
0 commit comments