Replace the static error string in ZIP_Put_In_Cache0 with on stack memory (original) (raw)
Sean Chou zhouyx at linux.vnet.ibm.com
Mon Apr 9 07:53:43 UTC 2012
- Previous message: New constructor in sun.tools.java.ClassPath builds a path using File.separator instead of File.pathSeparatorChar
- Next message: Replace the static error string in ZIP_Put_In_Cache0 with on stack memory
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi all,
I would like to suggest to replace the static error string in
ZIP_Put_In_Cache0 with on stack memory. Because it takes more time to modify a string than an int typed error number, it opens a window larger than int typed error number and might bring in race in multi-thread user cases.
I wrote a simple c testcase for JNI call "ZIP_Open", which shows that
it is easy to cause a race. In my machine, the testcase fails several time with only 2 threads.
The testcase is attached, it needs jdk shared libs to compile and run.
compile: gcc test_zip_open.c -I j2sdk-image/include/ -I j2sdk-image/include/linux/ j2sdk-image/jre/lib/i386/lib*.so j2sdk-image/jre/lib/i386/client/libjvm.so -pthread
run: please include the libs in LD_LIBRARY_PATH , it is easy to catch the error case with grep ////
Following is a simple output from my tests: zhouyx at zhouyx-workstation:/media/data/GiveBack/OJDK-482/i386$ ./a.out 1 | grep //// ////////////////////////// method1 pmsg :Permission denied zhouyx at zhouyx-workstation:/media/data/GiveBack/OJDK-482/i386$ ./a.out 10 | grep //// //////////////////////// method2 pmsg :No such file or directory //////////////////////// method2 pmsg :No such file or directory //////////////////////// method2 pmsg :No such file or directory zhouyx at zhouyx-workstation:/media/data/GiveBack/OJDK-482/i386$ ./a.out 100 | grep //// ////////////////////////// method1 pmsg :Permission denied ////////////////////////// method1 pmsg :Permission denied //////////////////////// method2 pmsg :No such file or directory //////////////////////// method2 pmsg :No such file or directory ////////////////////////// method1 pmsg :Permission denied
The modification is here:
http://cr.openjdk.java.net/~zhouyx/OJDK-482/webrev.00/ . It puts the error string on stack and return a dup one.
Please take a look and give some comments, thanks.
-- Best Regards, Sean Chou
- Previous message: New constructor in sun.tools.java.ClassPath builds a path using File.separator instead of File.pathSeparatorChar
- Next message: Replace the static error string in ZIP_Put_In_Cache0 with on stack memory
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]