RFR 8153629: Need to cover JVMTI's GetOwnedMonitorStackDepthInfo function
serguei.spitsyn at oracle.com
serguei.spitsyn at oracle.com
Fri Jan 12 23:14:52 UTC 2018
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 }
>>>> 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