RFR: 8286490: JvmtiEventControllerPrivate::set_event_callbacks CLEARING_MASK computation is incorrect [v2]

Serguei Spitsyn sspitsyn at openjdk.java.net
Tue May 24 23:52:01 UTC 2022


On Tue, 24 May 2022 23:31:36 GMT, Serguei Spitsyn <sspitsyn at openjdk.org> wrote:

>> Maybe it would be clearer to turn off the bits when there are no events:
>> 
>>   jlong enabled_bits = env->env_event_enable()->_event_callback_enabled.get_bits();
>>   for (int ei = JVMTI_MIN_EVENT_TYPE_VAL; ei <= JVMTI_MAX_EVENT_TYPE_VAL; ++ei) {
>>       jvmtiEvent evt_t = (jvmtiEvent)ei;
>>       if (!env->has_callback(evt_t)) {
>>           // clear the bit if there is no callback
>>           enabled_bits &= ~JvmtiEventEnabled::bit_for(evt_t);
>>       }
>>   }
>
> Thanks, Alex! You are right - fixed.
> I was stupid enough to confuse the direction. Minimal tracing helps in such cases.

Clearing event bits to make it more readable looks like a good idea.
What about the following? :

jlong enabled_bits = env->env_event_enable()->_event_callback_enabled.get_bits();
for (int ei = JVMTI_MIN_EVENT_TYPE_VAL; ei <= JVMTI_MAX_EVENT_TYPE_VAL; ++ei) {
  jvmtiEvent evt_t = (jvmtiEvent)ei;
  if (env->has_callback(evt_t)) {
     // set the bit if there is a callback
     enabled_bits |= JvmtiEventEnabled::bit_for(evt_t);
  } else {
    // clear the bit if there is no callback
    enabled_bits &= ~JvmtiEventEnabled::bit_for(evt_t);
  }
}

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

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


More information about the serviceability-dev mailing list