RFR(S): 8134103: JVMTI_ERROR_WRONG_PHASE(112): on checking for an interface

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Thu Mar 2 21:24:32 UTC 2017


The updated webrev:
http://cr.openjdk.java.net/~sspitsyn/webrevs/2017/hotspot/8134103-jdi-wrong-phase.2/

The change at L152-L153 has been reverted.
Just one sanity check is needed.

Thanks,
Serguei


On 3/2/17 11:21, serguei.spitsyn at oracle.com wrote:
> Dan,
>
> Thank you for reviewing!
> I was waiting for your comments.
>
>
> On 3/2/17 06:59, Daniel D. Daugherty wrote:
>> On 3/1/17 8:49 PM, serguei.spitsyn at oracle.com wrote:
>>> Please, review the JDK 10 fix for:
>>>   https://bugs.openjdk.java.net/browse/JDK-8134103
>>>
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2017/hotspot/8134103-jdi-wrong-phase.1/ 
>>>
>>
>> src/jdk.jdwp.agent/share/native/libjdwp/debugLoop.c
>>     old L152:             } else if (gdata->vmDead &&
>>     old L153:              ((cmd->cmdSet) != 
>> JDWP_COMMAND_SET(VirtualMachine))) {
>>
>>         The old code used to set the error condition when the VM
>>         is dead and the command was not in the VirtualMachine
>>         command set. With the new code:
>>
>>             L150:             } else if (gdata->vmDead) {
>>
>>         The error condition is now set for all command sets
>>         including the VirtualMachine command set. Minimally
>>         that means that this comment needs work:
>>
>>             L152:                  * VirtualMachine cmdSet quietly 
>> ignores some cmds
>>             L153:                  * after VM death, so, it sends 
>> it's own errors.
>>
>>         since you are no longer letting the VirtualMachine cmdSet send
>>         its own errors.
>
> Agreed, good catch, thanks!
>
>
>>
>>         It's not clear to me why you are now setting the error
>>         condition for VirtualMachine cmds instead of letting those
>>         cmds send their own errors.
>>
>>         See more comments below for your summary.
>
> Most likely, you are right here.
> I specifically looked at the VM commands but overlooked the ones that 
> are silently ignored.
> For instance: Resume (9) or exit (10).
>
> So, I will need to restore the L152+L153.
> Please, let me re-test this update and then I'll send another webrev.
> Interesting that no test has caught this as there is a very tiny gap 
> for such an intermittent issue to appear.
>
>
>>
>> src/jdk.jdwp.agent/share/native/libjdwp/eventHelper.c
>>     L243:          * Immediately close out any commands enqueued from a
>>     L244:          * previously attached debugger.
>>
>>         Perhaps L244 can be change to:
>>
>>                    * dead VM or a previously attached debugger.
>>
>>         to match the changed line of code:
>>
>>             L246         if (gdata->vmDead || command->sessionID != 
>> currentSessionID) {
>>
>>>
>>>
>>> Summary:
>>>   This is an intermittent issue in the debugger back-end (JDWP agent)
>>>   that impacts the nightly testing stability.
>>
>> Congrats on tracking down this elusive bug!
>
> Thanks!
>
>>
>>
>>>   The fix adds check guards of gdata->vmDead condition to the:
>>>    - debugLoop (JDWP Event Helper thread) and
>>>    - commandLoop (JDWP Transport Listener thread)
>>>   The commands are ignored in the DEAD phase.
>>
>> In the debugLoop, you aren't ignoring the commands, you
>> are setting an error condition.
>
> Right, I meant: ignored == not executed. :)
>
>
>>
>>
>>>   The check guard in the debugLoop already existed but only for 
>>> VirtualMachine
>>>   command set, so it has been extended to commands from all JDWP 
>>> command sets.
>>
>> I'm reading the existing code exactly opposite of what you
>> say here. The gdata->vmDead check applied to all command
>> sets except for the VirtualMachine command set. I agree
>> that you've extended it to all command sets, but we're
>> not ignoring the commands. We are now setting the error
>> condition for all command sets.
>
> Agreed.
>
>
>>
>> Maybe I'm missing something here. Perhaps I've been away
>> from this code for too long... :-)
>
> No, it is that I'm still learning this code with your help. :-)
>
>
> Thanks a lot!
> Serguei
>
>>
>> Dan
>>
>>
>>>
>>>   I suspect, this bug could also cause some of the timeout and 
>>> socket related issues.
>>>
>>>
>>> Testing:
>>>   The fix was tested with the nsk.jdi, jtreg com/sun/jdi and 100 runs
>>>   of the hotspot/test/closed/compiler/c1/6507107/HeapwalkingTest.java.
>>>   The test results are very clean.
>>>
>>>
>>> Thanks,
>>> Serguei
>>
>



More information about the serviceability-dev mailing list