OpenJDK7: libnet.so getting closed twice
Phil Phillips
pphillips at experts-exchange.com
Tue Jan 29 20:47:46 UTC 2013
Hey all,
I have some code running on the latest version of OpenJDK7. In one
thread, it opens a ServerSocket. In another, it loads a configuration
file. Once in a while, the config file fails to load with:
Caused by: java.io.FileNotFoundException: global.properties (Bad file
descriptor)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at java.io.FileReader.<init>(FileReader.java:58)
Digging in a little deeper with truss, I see something like:
open("/usr/local/openjdk7/jre/lib/amd64/libnet.so",O_RDONLY,01) = 63 (0x3f)
close(63) = 0 (0x0)
close(63) ERR#9 'Bad file
descriptor'\
...
open("global.properties",O_RDONLY,00) = 63 (0x3f)
fstat(63,{ mode=-rw-rw-r-- ,inode=32200398,size=18260,blksize=16384 }) =
0 (0x0)
fcntl(63,F_GETFD,)
libnet.so is getting opened (interestingly, not read - though it was
read previously) and then closed *twice*. It looks like there's a race
condition that can cause the "bad file descriptor" error if:
1) libnet.so opened
2) libnet.so closed (1st time)
3) config file opened (inherits now-free file descriptor)
4) libnet.so closed (2nd time - invalidates file descriptor for config file)
I don't see this kind of behavior in OpenJDK6. Does anyone know what
might cause libnet.so to be closed twice in OpenJDK7?
Thanks,
Phil
More information about the freebsd-java
mailing list