This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Thu, Jan 9, 2014 at 8:42 AM, Joseph S. Myers <joseph@codesourcery.com> wrote: > Maybe have the signal handler outside the loaded module call the function > from the loaded module, but with sem_post in the function outside the > module? I haven't tested whether this fixes the powerpc problem, but it > should avoid the identified race with the module being dlclosed while code > from it is executing. (There would of course then be the need to have > memory barriers to ensure the current pointer obtained from dlsym is > available from the thread calling the signal handler - and it would be > necessary to ensure that the test does still show up the non-signal-safety > if run with older glibc.) Could you please test attached proposed fix? It passes on x86_64 (ran 1000 times), and immediately self-deadlocks using system (i.e. older) glibc-2.15 like so: (gdb) bt #0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:93 #1 0x00007f2dc9adf231 in _L_lock_10574 () at malloc.c:5241 #2 0x00007f2dc9adcf87 in __GI___libc_malloc (bytes=139833800392736) at malloc.c:2921 #3 0x00007f2dca23c365 in allocate_and_init (map=0xc78bb0) at dl-tls.c:526 #4 tls_get_addr_tail (dtv=<optimized out>, the_map=0xc78bb0, module=<optimized out>) at dl-tls.c:739 #5 0x00007f2dca24d5d0 in __tls_get_addr (ti=0x7f2dc524ffb0) at dl-tls.c:764 #6 0x00007f2dc504f870 in action (signo=<optimized out>, info=0x7f2dc9a58b30, ignored=<optimized out>) at tst-tls7mod.c:32 #7 0x0000000000401913 in action (signo=<optimized out>, info=<optimized out>, ignored=<optimized out>) at tst-tls7.c:53 #8 <signal handler called> #9 __memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:44 #10 0x00007f2dc9ad9f6a in _int_free (av=0x7f2d98000020, p=0x7f2d980008b0, have_lock=0) at malloc.c:4101 #11 0x000000000040174a in spin (ignored=<optimized out>) at tst-tls7.c:37 #12 0x00007f2dc9e21e9a in start_thread (arg=0x7f2dc9a59700) at pthread_create.c:308 #13 0x00007f2dc9b4e3fd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112 Thanks, -- Paul Pluzhnikov
Attachment:
glibc-tls7-20140110.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |