RFR 8153629: Need to cover JVMTI's GetOwnedMonitorStackDepthInfo function

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Sat Jan 13 00:52:52 UTC 2018


On 1/12/18 15:42, Chris Plummer wrote:
> On 1/12/18 3:14 PM, serguei.spitsyn at oracle.com wrote:
>> On 1/12/18 15:07, Chris Plummer wrote:
>>> On 1/12/18 2:52 PM, serguei.spitsyn at oracle.com wrote:
>>>> Hi Chris,
>>>>
>>>>
>>>> On 1/12/18 14:31, Chris Plummer wrote:
>>>>> Hi Serguei,
>>>>>
>>>>> On 1/12/18 2:25 PM, serguei.spitsyn at oracle.com wrote:
>>>>>> Hi Daniil,
>>>>>>
>>>>>> It is pretty good in general.
>>>>>> Thank you for taking care about it!
>>>>>>
>>>>>> Some comments though.
>>>>>>
>>>>>> The test case is too trivial.
>>>>>> I'd suggest to extend it to have at least a couple of locks in 
>>>>>> the returned array.
>>>>>> One way to do it would be to add a instance synchronized method and
>>>>>> invoke it from the synchronized statement of the tested Thread.
>>>>>> Then the verifyOwnedMonitors() can be invoked from this method.
>>>>>>
>>>>>> A couple of comments on the native agent.
>>>>>>
>>>>>> 72         // JNI_OnLoad has not been called yet, so can't 
>>>>>> possibly be an instance of TEST_CLASS.
>>>>>>
>>>>>> Could you, please, rewrite this comment?
>>>>>> Maybe just tell that there probably was an error in loading the 
>>>>>> TEST_CLASS.
>>>>> This was copied from my comment in GetOwnedMonitorInfoTest, which 
>>>>> I assume this test was based on.
>>>>
>>>> Yes, I also assumed it was copied from the GetOwnedMonitorInfoTest.
>>>> The comment looks incorrect and creates some confusion.
>>> How is it incorrect? If testClass is NULL, that does imply that 
>>> JNI_OnLoad has not been called yet, which itself implies that the 
>>> object cannot be an instance of TEST_CLASS.
>>
>> It contradicts with the JNI_OnLoad code:
>>
>>  100     testClass = (*env)->FindClass(env, TEST_CLASS);
>>  101     if (testClass != NULL) {
>>  102       testClass = (*env)->NewGlobalRef(env, testClass);
>>  103     }
>>  104     if (testClass == NULL) {
>>  105         fprintf(stderr, "Error: Could not load class %s!\n", 
>> TEST_CLASS);
>>  106         return JNI_ERR;
>>  107     }
>>
> I think your point is that possibly testClass could be NULL if 
> JNI_OnLoad was called but failed.
Right.

> I think that is a minor detail, and the test will exit when that happens.

The reader needs to make this conclusion to understand the comment.
But I see your point, thanks.

Thanks,
Serguei

> thanks,
>
> Chris
>>
>>>>>> What about moving the FindClass(env, TEST_CLASS) to the 
>>>>>> verifyOwnedMonitors() function?
>>>>>> It will make the testClass variable local.
>>>>>>
>>>>> Also from GetOwnedMonitorInfoTest. This is code I reworked in that 
>>>>> test recently to fix 8191229.
>>>>
>>>> Yes, I remember.
>>>>
>>>>> These two tests should be kept consistent.
>>>>
>>>> I still think, making it a part of the verifyOwnedMonitors() would 
>>>> simplify the test.
>>>> Why do we need the testClass to be volatile and global if it is 
>>>> used only in the context of verification?
>>>> It generates less questions if it is local.
>>>> We could attempt to fix the GetOwnedMonitorInfoTest as well if we 
>>>> want this kind of consistency.
>>> I think in this test you could make looking up testClass local to 
>>> verifyOwnedMonitors() since calling it is under our control. In 
>>> GetOwnedMonitorInfoTest, there is no place to safely make it local, 
>>> because we need testClass during a JVMTI callback, and we can't 
>>> always correctly look up TEST_CLASS in the callback. That's why the 
>>> lookup was moved as part of 8191229 into JNI_OnLoad.
>>
>> Good explanation, thanks!
>> So, we do not need a consistency with the GetOwnedMonitorInfoTest in 
>> such a case.
>>
>> Thanks,
>> Serguei
>>
>>> thanks,
>>>
>>> Chris
>>>>
>>>> Thanks,
>>>> Serguei
>>>>
>>>>
>>>>> Chris
>>>>>>  200 fprintf(stderr, "VerifyOwnedMonitors: FAIL: 
>>>>>> stackDepthInfo[0].stack_depth should be 1.\n");
>>>>>>
>>>>>>  207         fprintf(stderr, "VerifyOwnedMonitors: FAIL: 
>>>>>> monitorCount should be 1.\n");
>>>>>>
>>>>>>
>>>>>> It'd better to rephrase the messages above to tell about actual 
>>>>>> values vs expected.
>>>>>> It normally simplifies the analysis of failures as there is no 
>>>>>> need to find
>>>>>> what values were printed before and that they are exactly what 
>>>>>> needed for comparison.
>>>>>>
>>>>>> Thanks,
>>>>>> Serguei
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 1/11/18 17:45, Daniil Titov wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> Please review the following fix that adds a jtreg test for 
>>>>>>> GetOwnedMonitorStackDepthInfo JVMTI function.
>>>>>>>
>>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8153629
>>>>>>> Webrev: http://cr.openjdk.java.net/~dtitov/8153629/webrev.00
>>>>>>>
>>>>>>>
>>>>>>> The tests ran successfully with Mach5.
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Daniil
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>>
>>
>
>



More information about the serviceability-dev mailing list