Codereview request: 8007710 runtime/7158988/FieldMonitor.java fails with com.sun.jdi.VMDisconnectedException: Connection closed

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Tue Feb 11 12:55:08 PST 2014


The fix looks good.
But could you change "impossible" at line 45 to something more adequate, 
i.e. "caught exception"? :

   41         System.out.println("---TestPostFieldModification-run waiting to exit ...");
   42         try {
   43             System.in.read();
   44         } catch (Exception e) {
   45             System.out.println("---TestPostFieldModification-run impossible? "+e);
   46             e.printStackTrace();
   47         }



Thanks,
Serguei


On 2/11/14 9:30 AM, shanliang wrote:
> Here is the new fix in which FieldMonitor will write to 
> TestPostFieldModification, to inform the latter to quit, as suggested 
> bu Jaroslav
>    http://cr.openjdk.java.net/~sjiang/JDK-8007710/01/
>
> Thanks,
> Shanliang
>
> shanliang wrote:
>> shanliang wrote:
>>> Jaroslav Bachorik wrote:
>>>> On 11.2.2014 16:31, shanliang wrote:
>>>>> Staffan Larsen wrote:
>>>>>> Hi Shanliang,
>>>>>>
>>>>>> I can’t quite see how the test can fail in this way. When the
>>>>>> ClassPrepareEvent happens, the debuggee will be suspended. So when
>>>>>> addFieldWatch() is called, the debuggee should not have moved.
>>>>> I am not expert of jdi so I may miss something here. I checked the
>>>>> failure trace and saw the report exception happen when FieldMonitor
>>>>> received ClassPrepareEvent and was doing addFieldWatch. 
>>>>> FieldMonitor did
>>>>> call "vm.resume()" before treating events.
>>>>
>>>> AFAICS, calling vm.resume() results in an almost immediate debuggee 
>>>> death. The gc() invoking thread "d" is flagged as a deamon and as 
>>>> such doesn't prevent the process from exiting. The other thread is 
>>>> not a daemon but will finish in only few cycles.
>>> I looked at the class com.sun.jdi.VirtualMachine, here is the 
>>> Javadoc of the method "resume":
>>>    /**
>>>     * Continues the execution of the application running in this
>>>     * virtual machine. All threads are resumed as documented in
>>>     * {@link ThreadReference#resume}.
>>>     *
>>>     * @throws VMCannotBeModifiedException if the VirtualMachine is 
>>> read-only - see {@link VirtualMachine#canBeModified()}.
>>>     *
>>>     * @see #suspend
>>>     */
>>>    void resume();
>>> My understanding is that the debuggee resumes to work after this 
>>> call, instead to die?
>> In fact the problem is here, the vm (TestPostFieldModification) 
>> should not die before FieldMonitor finishes addFieldWatch.
>>
>> Shanliang
>>>>
>>>>>
>>>>> I reproduced the bug by add sleep(1000) after vm.resume() but before
>>>>> calling eventQueue.remove();
>>>>
>>>> It looks like some kind of synchronization between the debugger and 
>>>> the debuggee is necessary. But I wonder if you should better use 
>>>> the process.getOuptuptStream() to write and flush a message for the 
>>>> debugee indicating that it can exit. And in the debugee you would 
>>>> just do System.in.read() as the last statement in the main() 
>>>> method. Seems more robust than involving files.
>>> It could work, but creating a file in the testing directory should 
>>> have no issue, but yes maybe less performance.
>>>
>>> Thanks,
>>> Shanliang
>>>>
>>>> Cheers,
>>>>
>>>> -JB-
>>>>
>>>>>
>>>>> Thanks,
>>>>> Shanliang
>>>>>> One problem I do see with the test is that it does not wait for a
>>>>>> VMStartEvent before setting up requests. I’m not sure if that could
>>>>>> cause the failure in the bug report, though.
>>>>>>
>>>>>> /Staffan
>>>>>>
>>>>>> On 11 feb 2014, at 15:13, shanliang <shanliang.jiang at oracle.com> 
>>>>>> wrote:
>>>>>>
>>>>>>> Hi ,
>>>>>>>
>>>>>>> The problem could be that FieldMonitor did not have enough time to
>>>>>>> "addFieldWatch" but the vm to monitor 
>>>>>>> (TestPostFieldModification) was
>>>>>>> already ended.
>>>>>>>
>>>>>>> So we should make sure that TestPostFieldModification exits after
>>>>>>> FieldMonitor has done necessary. The solution proposed here is that
>>>>>>> FieldMonitor creates a file after adding field watching, and
>>>>>>> TestPostFieldModification quits only after finding the file.
>>>>>>>
>>>>>>> web:
>>>>>>> http://icncweb.fr.oracle.com/~shjiang/webrev/8007710/00/
>>>>>>>
>>>>>>> bug:
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8007710
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Shanliang
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20140211/63046720/attachment.html 


More information about the serviceability-dev mailing list