Hi,

This is part 2 of a two part upstreaming process of the patch mentioned in the 
subject line. The patch was split into 2 in order to document 2 separate 
specification changes that arose from a change in the implementation, with 2 
separate CSRs. The first patch can be found here: 
https://github.com/openjdk/jdk/pull/4395

This patch adds uniform exception handling for exceptions thrown during FLA 
upcalls. Currently, these exceptions are either handled similarly to the VMs 
`CATCH` macro, or ignored after which control returns to unsuspecting native 
code, until control returns to Java, which will then handle the exception. The 
handling depends on the invocation mode.

Both of these are bad. The former because a stack trace is not printed and 
instead the VM exits with a fatal error. The latter is bad because an upcall 
completing abruptly and returning to native code which has no idea an exception 
occurred is unsafe, in the sense that invariants about the state of the program 
that the native code depends on might no longer hold.

This patch adds uniform exception handling that replaces both of these cases 
(see `SharedUtils::handleUncaughtException`), which prints the exception stack 
trace, and then unconditionally exits the VM, which is the only safe course of 
action at that point.

Exceptions thrown by upcalls should instead be handled during the upcall 
itself, for instance by translating the exception into an error code that is 
then returned to the native caller, which can deal with it appropriately.

See also the original review for panama-foreign: 
https://github.com/openjdk/panama-foreign/pull/543

Thanks,
Jorn

Testing: `jdk_foreign` test suite.

Thanks,
Jorn

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

Depends on: https://git.openjdk.java.net/jdk/pull/4395

Commit messages:
 - Remove trailing whitespace
 - Pt2

Changes: https://git.openjdk.java.net/jdk/pull/4396/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4396&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8268339
  Stats: 282 lines in 14 files changed: 275 ins; 0 del; 7 mod
  Patch: https://git.openjdk.java.net/jdk/pull/4396.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/4396/head:pull/4396

PR: https://git.openjdk.java.net/jdk/pull/4396

Reply via email to