# SIGSEGV (0xb) at pc=0x00007f034d4ab320, pid=24055, tid=139652891526912 (0x7F0378FDC700)
We clearly show that the destructor that crashes (i.e. 0x7f034d4ab320) is not created by us, but by Ubuntu itself (ie. g_quark_from_static_string), so this proves it's not Java, but Ubuntu itself who seems responsible.
After obtaining eglibc-2.17
svn co svn://svn. eglibc. org/branches/ eglibc- 2_17 eglibc-2.17
modifying it to show who calls "pthread_ key_create" with non NULL destructor, building it and using it to run the example we get:
>>>>> pthread_key_create pthread: 0x7f0378fdc700, destr: 0x7f034d4ab320 Desktop/ work/eglibc- 2.17/build/ nptl/libpthread .so.0(+ 0xceaa) [0x7f03c3c81eaa] Desktop/ work/eglibc- 2.17/build/ nptl/libpthread .so.0(_ _pthread_ key_create+ 0x47) [0x7f03c3c81f47] 64-linux- gnu/libglib- 2.0.so. 0(+0x88301) [0x7f034d4d0301] 64-linux- gnu/libglib- 2.0.so. 0(g_private_ get+0x9) [0x7f034d4d0749] 64-linux- gnu/libglib- 2.0.so. 0(g_slice_ alloc+0x1d) [0x7f034d4ab94d] 64-linux- gnu/libglib- 2.0.so. 0(g_hash_ table_new_ full+0x1e) [0x7f034d47fc6e] 64-linux- gnu/libglib- 2.0.so. 0(g_quark_ from_static_ string+ 0x105) [0x7f034d49fbc5] x86_64- linux-gnu/ libgobject- 2.0.so. 0(+0xb37c) [0x7f034d75437c] ld-linux- x86-64. so.2(+0xf856) [0x7f03c468a856] ld-linux- x86-64. so.2(+0xf910) [0x7f03c468a910] ld-linux- x86-64. so.2(+0x13fdf) [0x7f03c468efdf] ld-linux- x86-64. so.2(+0xf6e6) [0x7f03c468a6e6] ld-linux- x86-64. so.2(+0x13809) [0x7f03c468e809] 64-linux- gnu/libdl. so.2(+0x1026) [0x7f03c3e93026] ld-linux- x86-64. so.2(+0xf6e6) [0x7f03c468a6e6] 64-linux- gnu/libdl. so.2(+0x163c) [0x7f03c3e9363c] 64-linux- gnu/libdl. so.2(dlopen+ 0x31) [0x7f03c3e930c1] Desktop/ work/jdks/ jdk8/build/ linux-x86_ 64-normal- server- slowdebug/ jdk/lib/ amd64/libawt_ xawt.so( +0x4dd89) [0x7f03a4c1dd89] Desktop/ work/jdks/ jdk8/build/ linux-x86_ 64-normal- server- slowdebug/ jdk/lib/ amd64/libawt_ xawt.so( Java_sun_ awt_UNIXToolkit _check_ 1gtk+0x1a) [0x7f03a4c1912b]
Obtained 20 stack frames.
/home/gerard/
/home/gerard/
/lib/x86_
/lib/x86_
/lib/x86_
/lib/x86_
/lib/x86_
/usr/lib/
/lib64/
/lib64/
/lib64/
/lib64/
/lib64/
/lib/x86_
/lib64/
/lib/x86_
/lib/x86_
/home/gerard/
/home/gerard/
[0x7f03ad0298dc]
>>>>> pthread_key_t: 2
then later when thread 0x7f0378fdc700 goes away:
>>>>> __nptl_ deallocate_ tsd keys[idx] .destr: 0x7f03c3e932c0 keys[idx] .destr: 0x7f034d4ab320
>>>>> pthread: 0x7f0378fdc700
>>>>> HERE1
>>>>> data: 0x7f03500008c0
>>>>> __pthread_
>>>>> HERE2
>>>>> HERE1
>>>>> data: 0x7f03500f5700
>>>>> __pthread_
which ends in a crash:
# SIGSEGV (0xb) at pc=0x00007f034d 4ab320, pid=24055, tid=139652891526912 (0x7F0378FDC700)
We clearly show that the destructor that crashes (i.e. 0x7f034d4ab320) is not created by us, but by Ubuntu itself (ie. g_quark_ from_static_ string) , so this proves it's not Java, but Ubuntu itself who seems responsible.