Comment 9 for bug 1234253

Revision history for this message
gerard ziemski (gerard-ziemski) wrote :

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
Obtained 20 stack frames.
/home/gerard/Desktop/work/eglibc-2.17/build/nptl/libpthread.so.0(+0xceaa) [0x7f03c3c81eaa]
/home/gerard/Desktop/work/eglibc-2.17/build/nptl/libpthread.so.0(__pthread_key_create+0x47) [0x7f03c3c81f47]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(+0x88301) [0x7f034d4d0301]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_private_get+0x9) [0x7f034d4d0749]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_slice_alloc+0x1d) [0x7f034d4ab94d]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_hash_table_new_full+0x1e) [0x7f034d47fc6e]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_quark_from_static_string+0x105) [0x7f034d49fbc5]
/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0(+0xb37c) [0x7f034d75437c]
/lib64/ld-linux-x86-64.so.2(+0xf856) [0x7f03c468a856]
/lib64/ld-linux-x86-64.so.2(+0xf910) [0x7f03c468a910]
/lib64/ld-linux-x86-64.so.2(+0x13fdf) [0x7f03c468efdf]
/lib64/ld-linux-x86-64.so.2(+0xf6e6) [0x7f03c468a6e6]
/lib64/ld-linux-x86-64.so.2(+0x13809) [0x7f03c468e809]
/lib/x86_64-linux-gnu/libdl.so.2(+0x1026) [0x7f03c3e93026]
/lib64/ld-linux-x86-64.so.2(+0xf6e6) [0x7f03c468a6e6]
/lib/x86_64-linux-gnu/libdl.so.2(+0x163c) [0x7f03c3e9363c]
/lib/x86_64-linux-gnu/libdl.so.2(dlopen+0x31) [0x7f03c3e930c1]
/home/gerard/Desktop/work/jdks/jdk8/build/linux-x86_64-normal-server-slowdebug/jdk/lib/amd64/libawt_xawt.so(+0x4dd89) [0x7f03a4c1dd89]
/home/gerard/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]
[0x7f03ad0298dc]
>>>>> pthread_key_t: 2

then later when thread 0x7f0378fdc700 goes away:

>>>>> __nptl_deallocate_tsd
>>>>> pthread: 0x7f0378fdc700
>>>>> HERE1
>>>>> data: 0x7f03500008c0
>>>>> __pthread_keys[idx].destr: 0x7f03c3e932c0
>>>>> HERE2
>>>>> HERE1
>>>>> data: 0x7f03500f5700
>>>>> __pthread_keys[idx].destr: 0x7f034d4ab320

which ends in a crash:

# 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.