On Thu, 14 May 2026 02:12:39 GMT, Serguei Spitsyn <[email protected]> wrote:

>> I think so, there are no java code invocations between setting and the 
>> actual code updating counters in jvmti callback.
>> 
>> The synchronization is impossible (I think),.
>> To be more detailed. There is a gap between reading callback and executing 
>> it in the.
>> 
>> 
>>       jvmtiEventCompiledMethodUnload callback = 
>> env->callbacks()->CompiledMethodUnload;
>>       if (callback != nullptr) {
>>         (*callback)(env->jvmti_external(), method, code_begin);
>>       }
>> 
>> 
>> the` env->callbacks()->CompiledMethodUnload` might be updated after read and 
>> before callback is invoked.
>> This is done while thread is already in native state, so it is not synced 
>> with callback setting.
>> 
>> The issue is known. The synchronization has major performance issues and not 
>> strictly required by JVMTi specification. 
>> 
>> 
>> However, it might be possible to put in the Monitor blocks the jvmt event 
>> handling and events resetting to minimize the gap.
>
> The JVMTI code that sends events is intentionally racy. The agents can do 
> their own synchronization if necessary.
> 
> The fragment below is kind of strange:
> 
> 494 agentProc(jvmtiEnv* jvmti, JNIEnv* agentJNI, void* arg) {
> 495 
> 496     int i;
> 497 
> 498     for (i = 1; i <= STEP_AMOUNT; i++) {
> 499 
> 500         if (!nsk_jvmti_waitForSync(timeout))
> 501             return;
> 502 
> 503         NSK_DISPLAY0("Check received events\n");
> 504 
> 505         if (i < STEP_AMOUNT) {
> 506             showEventStatistics(i);
> 507             if (!checkEvents(i))
> 508                 nsk_jvmti_setFailStatus();
> 509 
> 510             if (!setCallBacks(i + 1)) {           <== ???
> 511                 return;
> 512             }
> 513         }
> 514 
> 515         if (!nsk_jvmti_resumeSync())
> 516             return;
> 517     }
> . . .
> 
> 
> The `setCallBacks()` is never called with the step 1 from the `agentProc()` 
> but called with step 1 from `Agent_Initialize()`. It is kind of unusual. It 
> is not clear what was a reason for that.

Also, why the steps are not numbered starting from 0?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/31128#discussion_r3238678781

Reply via email to