On Thu, 5 Feb 2026 11:15:04 GMT, Johan Sjölen <[email protected]> wrote:
>> Hi @jpbempel, I couldn't see the equivalent form in `c_a_n_c_v` (returning
>> early when there may be a pending exception).
>>
>>> if merge_cp_and_rewrite returns anything else than JVMTI_ERROR_NONE it
>>> should be propagated.
>>
>> Yeah, but you've got a `THREAD` call into a method taking `TRAPS` as an
>> argument. A method taking `TRAPS` can be seen as one being able to throw,
>> but we're doing the stack unwinding manually in the JVM.
>>
>> As an example, in the code for `merge_cp_and_rewrite` the call to
>> `ConstantPool::allocate` can set a pending exception. You can see this if
>> you dig down into `MetadataFactory` and so on, look at `metaspace.cpp:33`
>> and see the pending exception there.
>>
>> So, by returning early, you're not handling the pending exception, which
>> breaks the JVM.
>
> It basically seems like the correct fix is:
>
>
> if (HAS_PENDING_EXCEPTION) {
> // ... same as before
> } else if (res != JVMTI_ERROR_NONE) {
> return res;
> }
thanks for the explanation I made the change
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/29445#discussion_r2769510905