RFR(S): JDK-8042155 Tests for stack guard pages have to be cleaned up
Dmitry Samersoff
dmitry.samersoff at oracle.com
Tue May 13 10:18:23 UTC 2014
Dan,
Thank you for the review!
1. I use exit(7) to make the situation when the test fails because of
some error condition clear visible.
2. I'm not sure it's a good idea to pass test if compilation fails, but
I make this changes to handle it the same way as other tests does
3. Agree with rest of comments. See new webrev.
http://cr.openjdk.java.net/~dsamersoff/JDK-8042155/webrev.02/
-Dmitry
On 2014-05-13 01:51, Daniel D. Daugherty wrote:
> On 5/1/14 8:21 AM, Dmitry Samersoff wrote:
>> Hi Everyone,
>>
>> Please, review test changes:
>>
>> http://cr.openjdk.java.net/~dsamersoff/JDK-8042155/webrev.01/
>
>
> test/runtime/StackGuardPages/testme.sh
> You need to check the command status after running gcc_cmd
> and if it is not zero, then gratuitously pass the test.
> Jerry made a similar test fix last week:
>
> +if [ $? -ne 0 ] ; then
> + echo "Compile failed, Ignoring failed compilation and forcing the
> test to pass"
> + exit 0
> +fi
>
> This will catch the case where a 64-bit Linux test machine
> has a compiler, but not the 32-bit build env.
>
> test/runtime/StackGuardPages/DoOverflow.java
> No comments.
>
> test/runtime/StackGuardPages/invoke.c
> line 28: * than detaching from vm thread and overflow stack once
> again.
> Typo?: 'than detaching' -> 'Then we detach'
>
> line 92: (*_jvm)->AttachCurrentThread(_jvm, (void**)&env, NULL);
> line 125: (*_jvm)->AttachCurrentThread(_jvm, (void **)&env, NULL);
> What happens if the JNI AttachCurrentThread() call fails?
>
> line 96: printf("Test ERROR. Can't load class DoOverflow\n");
> line 102: printf("Test ERROR. Can't find method DoOverflow.printIt\n");
> line 129: printf("Test ERROR. Can't load class DoOverflow\n");
> line 135: printf("Test ERROR. Can't find method
> DoOverflow.printAlive\n");
> line 192: printf("Test ERROR. Can't create JavaVM\n");
> line 224: printf("Test ERROR. Unknown parameter should be
> test_java_overflow or test_native_overflow\n");
> Don't errors usually get printed on stderr?
>
> line 106: (*env)->CallStaticVoidMethod(env, class_id, method_id, NULL);
> What happens if this call fails? Other than the intentional
> StackOverflowError, but wait, you catch and swallow that error...
>
> line 108: (*_jvm)->DetachCurrentThread(_jvm);
> line 150 (*_jvm)->DetachCurrentThread(_jvm);
> What happens if this call fails?
>
> line 139: (*env)->CallStaticVoidMethod (env, class_id, method_id,
> NULL);
> What happens if this call fails?
>
> line 153: // For non-initial thread we doesn't unmap
> Typo: "we doesn't unmap"
> -> "we don't unmap"
>
> line 154: ...same SEGV_ACCERR tring to access it
> Typos, perhaps: same SEGV signal trying to access it
>
> line 156: // We have no ways to check this, so bail out, marking
> test as succeded
> Typo: 'no ways' -> 'no way'
> Typo: 'as succeded' -> 'as succeeded'
>
> line 157: printf("Test OK. ...
> line 171: printf("Test OK. ...
> Should "OK" be "PASSED"?
>
> line 168: printf("Test FAILED. Stack guard page is still there\n");
> Don't failures usually get printed on stderr?
>
> line 225: You'll end up here if no arguments are passed or if the
> wrong arguments are passed. You should have a better usage
> message, e.g.:
>
> void usage() {
> fprintf(stderr, "Usage: invoke test_java_overflow\n");
> fprintf(stderr, " invoke test_native_overflow\n");
> exit(1);
> }
>
> I noticed that all the exit() calls pass '7'. Why '7'?
>
> Also, why 'return 0' or 'return 1' instead of 'exit(0)' or 'exit(1)'?
>
>
> test/runtime/6929067/T.java
> test/runtime/6929067/Test6929067.sh
> test/runtime/6929067/invoke.c
> test/runtime/InitialThreadOverflow/DoOverflow.java
> test/runtime/InitialThreadOverflow/invoke.c
> test/runtime/InitialThreadOverflow/testme.sh
> OK I can see why you want to combine the two tests.
> I'm guessing that 'InitialThreadOverflow' was
> derived from the much older '6929067'...
>
>
> Dan
>
>>
>> The fix combine tests for 6929067 and 8009062 into single, more
>> sophisticated test.
>>
>> -Dmitry
>>
>
--
Dmitry Samersoff
Oracle Java development team, Saint Petersburg, Russia
* I would love to change the world, but they won't give me the sources.
More information about the hotspot-runtime-dev
mailing list