Hi Daniil,
Some nits.
207 if (monitorCount == 3) {
208 for (idx = 0; idx < 3; idx++) {
Need to get rid of hardcoded number of monitors (3).
184 err = (*jvmti) -> GetCurrentThread(jvmti, &thread);
Extra spaces around '->'.
214 TEST_CLASS,
TEST_OBJECT_LOCK_DEPTH,stackDepthInfo[idx].stack_depth);
221 LOCK1_CLASS,
LOCK1_DEPTH,stackDepthInfo[idx].stack_depth);
Missed a space before stackDepthInfo[...
Also, I have more suggestions to add to the Chris's comment:
- Remove the big condition if (monitorCount == 3) around the loop and
replace it with:
for (idx = 0; idx < monitorCount; idx++) {
and print monitor miscount separately before of after the loop:
if (monitorCount != 3) {
fprintf(stderr, "VerifyOwnedMonitors: FAIL: invalid
monitorCount, expected: %d, found: %d.\n",
3, monitorCount);
}
Then it would look like this:
status = PASSED;
if (monitorCount != EXP_MON_COUNT) {
fprintf(stderr, "VerifyOwnedMonitors: FAIL: invalid monitorCount, expected:
%d, found: %d.\n",
EXP_MON_COUNT, monitorCount);
status = FAILED;
}
for (idx = 0; idx < monitorCount; idx++) {
if (CheckLockObject(env, stackDepthInfo[idx].monitor, testClass) ==
JNI_TRUE) {
if (stackDepthInfo[idx].stack_depth != TEST_OBJECT_LOCK_DEPTH) {
fprintf(stderr, "FAILED: invalid stack_depth for %s monitor,
expected: %d, found: %d.\n",
TEST_CLASS, TEST_OBJECT_LOCK_DEPTH,
stackDepthInfo[idx].stack_depth);
status = FAILED;
}
} else if (CheckLockObject(env, stackDepthInfo[idx].monitor,
lock1Class) == JNI_TRUE) {
if (stackDepthInfo[idx].stack_depth != LOCK1_DEPTH) {
fprintf(stderr, "FAILED: invalid stack_depth for %s monitor,
expected: %d, found: %d.\n",
LOCK1_CLASS,
LOCK1_DEPTH,stackDepthInfo[idx].stack_depth);
status = FAILED;
}
} else if (CheckLockObject(env, stackDepthInfo[idx].monitor,
lock2Class) == JNI_TRUE) {
if (stackDepthInfo[idx].stack_depth != LOCK2_DEPTH) {
fprintf(stderr, "FAILED: invalid stack_depth for %s monitor,
expected: %d, found: %d.\n",
LOCK2_CLASS, LOCK2_DEPTH,
stackDepthInfo[idx].stack_depth);
status = FAILED;
}
} else {
fprintf(stderr, "FAILED: monitor[%d] should be instance of %s, %s, or
%s\n",
idx, TEST_CLASS, LOCK1_CLASS, LOCK2_CLASS);
status = FAILED;
}
}
Also, it does not seem that important to have two different lock classes Lock1
and Lock2.
Would it be simpler to keep just one of them?
Thanks,
Serguei
On 1/17/18 11:29, Chris Plummer wrote:
Hi Daniil,
Have you run with -Xcomp. I'm concerned that inlining will cause the
test to fail because stack depths will not be as expected. Also, if
you find the owned monitor, but the depth is not as expected, I think
you are better off printing an error message right away rather than
the somewhat misleading "FAIL: invalid number of %s monitors" message
later on.
thanks,
Chris
On 1/16/18 6:31 PM, Daniil Titov wrote:
Hello,
Please review an updated fix that makes the test more extensive and
includes suggested changes.
Bug: https://bugs.openjdk.java.net/browse/JDK-8153629
Webrev: http://cr.openjdk.java.net/~dtitov/8153629/webrev.02/
Thank you!
Best regards,
Daniil
On 1/12/18, 2:26 PM, "serguei.spit...@oracle.com"
<serguei.spit...@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.
What about moving the FindClass(env, TEST_CLASS) to the
verifyOwnedMonitors() function?
It will make the testClass variable local.
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
>
>