diff --git a/test/runtime/jsig/Test8017498.sh b/test/runtime/jsig/Test8017498.sh index daa9f615099a03d714c40cf43843b422805b2acf..6a8f4634bc7db80f284a6c4999a619702af9459c 100644 --- a/test/runtime/jsig/Test8017498.sh +++ b/test/runtime/jsig/Test8017498.sh @@ -26,8 +26,9 @@ ## ## @test Test8017498.sh ## @bug 8017498 +## @bug 8020791 ## @summary sigaction(sig) results in process hang/timed-out if sig is much greater than SIGRTMAX -## @run shell Test8017498.sh +## @run shell/timeout=30 Test8017498.sh ## if [ "${TESTSRC}" = "" ] @@ -46,17 +47,13 @@ case "$OS" in echo "Testing on Linux" if [ "$VM_BITS" = "64" ] then - LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}amd64${FS}libjsig.so + MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}amd64${FS}libjsig.so else - LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}i386${FS}libjsig.so + MY_LD_PRELOAD=${TESTJAVA}${FS}jre${FS}lib${FS}i386${FS}libjsig.so fi - echo LD_PRELOAD = ${LD_PRELOAD} - export LD_PRELOAD=${LD_PRELOAD} + echo MY_LD_PRELOAD = ${MY_LD_PRELOAD} ;; *) - NULL=NUL - PS=";" - FS="\\" echo "Test passed; only valid for Linux" exit 0; ;; @@ -67,29 +64,29 @@ THIS_DIR=. cp ${TESTSRC}${FS}*.java ${THIS_DIR} ${TESTJAVA}${FS}bin${FS}javac *.java -gcc -fPIC -shared -o ${TESTSRC}${FS}libTestJNI.so -I${TESTJAVA}${FS}include -I${TESTJAVA}${FS}include${FS}linux ${TESTSRC}${FS}TestJNI.c +gcc -DLINUX -fPIC -shared \ + -o ${TESTSRC}${FS}libTestJNI.so \ + -I${TESTJAVA}${FS}include \ + -I${TESTJAVA}${FS}include${FS}linux \ + ${TESTSRC}${FS}TestJNI.c +if [ $? != 0 ] +then + echo "WARNING: the gcc command failed." 2>&1 +fi # run the java test in the background -echo ${TESTJAVA}${FS}bin${FS}java -Djava.library.path=${TESTSRC}${FS} -server TestJNI 100 > test.out 2>&1 & -${TESTJAVA}${FS}bin${FS}java -Djava.library.path=${TESTSRC}${FS} -server TestJNI 100 > test.out 2>&1 & - -# obtain the process id -C_PID=$! +cmd="LD_PRELOAD=$MY_LD_PRELOAD \ + ${TESTJAVA}${FS}bin${FS}java \ + -Djava.library.path=${TESTSRC}${FS} -server TestJNI 100" +echo "$cmd > test.out 2>&1" +eval $cmd > test.out 2>&1 -# sleep for 1s -sleep 1 - -# reset LD_PRELOAD -unset LD_PRELOAD - -# check the output file (test.out) grep "old handler" test.out > ${NULL} if [ $? = 0 ] then echo "Test Passed" exit 0 -else - kill -9 ${C_PID} - echo "Test Failed" - exit 1 fi + +echo "Test Failed" +exit 1 diff --git a/test/runtime/jsig/TestJNI.c b/test/runtime/jsig/TestJNI.c index a3b687a18d8692a9088743326c79c8f38ed1be7e..20057facd76c2fe8537431a6be9e1b4e266c29ca 100644 --- a/test/runtime/jsig/TestJNI.c +++ b/test/runtime/jsig/TestJNI.c @@ -21,9 +21,9 @@ * questions. */ +#define _GNU_SOURCE // for the definition of REG_RIP in ucontext.h #include #include -#define __USE_GNU #include #include @@ -42,8 +42,6 @@ void sig_handler(int sig, siginfo_t *info, ucontext_t *context) { JNIEXPORT void JNICALL Java_TestJNI_doSomething(JNIEnv *env, jclass klass, jint val) { struct sigaction act; struct sigaction oact; - pthread_attr_t attr; - stack_t stack; act.sa_flags = SA_ONSTACK|SA_RESTART|SA_SIGINFO; sigfillset(&act.sa_mask);