RFR(XS) 8020791: [TESTBUG] runtime/jsig/Test8017498.sh failed to compile
Daniel D. Daugherty
daniel.daugherty at oracle.com
Fri Jul 19 07:22:24 PDT 2013
On 7/18/13 6:12 PM, Calvin Cheung wrote:
> Please review this small fix for a testcase.
>
> webrev:
> http://cr.openjdk.java.net/~ccheung/8020791/webrev/
test/runtime/jsig/Test8017498.sh
line 54: export LD_PRELOAD=${LD_PRELOAD}
This export will affect every program run after this point.
Please change the variable name to MY_LD_PRELOAD" and don't
export it.
line 57: NULL=NUL
line 58: PS=";"
line 59: FS="\\"
These are not needed for your default case and they are
Windows specific. Your default case is non-Linux so these
are wrong in any case.
line 70: gcc -DLINUX -fPIC -shared -o ${TESTSRC}${FS}libTestJNI.so ...
Please check the exit status of 'gcc' and do _something_
if the compile fails. You could even pass the test if there
is no compiler.
line 72: # run the java test in the background
Why do you have to run the test in the background?
line 73: echo ${TESTJAVA}${FS}bin${FS}java
-Djava.library.path=${TESTSRC}${FS} -server TestJNI 100 > test.out 2>&1 &
line 74: ${TESTJAVA}${FS}bin${FS}java
-Djava.library.path=${TESTSRC}${FS} -server TestJNI 100 > test.out 2>&1 &
line 75:
line 76: # obtain the process id
line 77: C_PID=$!
line 73 will run the echo in background and you're running java in
the background. That might lead to a race for the C_PID setting on
line 77.
Lines 73 and 74 would be better as:
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 &"
$cmd > test.out 2>&1 &
line 80: sleep 1
One second? This is just asking for intermittent failures of
this test. If you decide that you have to run this test in
background then something like this will be better:
count=0
# give the test 60 seconds to pass
while [ "$count" -lt 12 ]; do
sleep 5
grep "old handler" test.out > ${NULL}
if [ $? = 0 ]; then
echo "Test Passed"
exit 0
fi
count=`expr $count + 1`
done
kill -9 ${C_PID}
echo "Test Failed"
exit 1
line 82: # reset LD_PRELOAD
line 83: unset LD_PRELOAD
You don't need this if you switch to the MY_LD_PRELOAD logic
that I gave you above.
test/runtime/jsig/TestJNI.c
line 45: pthread_attr_t attr;
line 46: stack_t stack;
These variables are not used.
Dan
>
> Bug:
> https://jbs.oracle.com/bugs/browse/JDK-8020791
> http://bugs.sun.com/view_bug.do?bug_id=8020791
>
> When the testcase was developed, it was using an incomplete jni_md.h
> without the following:
> #if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
> The default typedef long jlong will be used during compilation of the
> native code of the testcase on linux_x64.
>
> With the above #if defined in the jni_md.h, if "LINUX" isn't defined,
> the following typedef will be used and causing the compile error.
> typedef __int64 jlong;
>
> The fix is to define LINUX (-DLINUX) in the gcc command line.
> The change in TestJNI.c is just a minor cleanup.
>
> Test:
> Ran jtreg on the testcase.
>
> thanks,
> Calvin
More information about the hotspot-runtime-dev
mailing list