diff options
author | Andrew Hunter <ahh@google.com> | 2014-01-03 11:22:26 -0800 |
---|---|---|
committer | Paul Pluzhnikov <ppluzhnikov@google.com> | 2014-01-03 11:22:26 -0800 |
commit | 7f507ee17aee720fa423fa38502bc3caa0dd03d7 (patch) | |
tree | 05ec2f0128d719097d18b531bf5e19c617520649 /elf/dl-open.c | |
parent | 7dd009d8656c0f5c1c633f3764746335a6feefa7 (diff) | |
download | glibc-7f507ee17aee720fa423fa38502bc3caa0dd03d7.tar.gz glibc-7f507ee17aee720fa423fa38502bc3caa0dd03d7.tar.xz glibc-7f507ee17aee720fa423fa38502bc3caa0dd03d7.zip |
Async-signal safe TLS.
ChangeLog: 2014-01-03 Andrew Hunter <ahh@google.com> * elf/dl-open.c (): New comment. * elf/dl-reloc.c (_dl_try_allocate_static_tls): Use atomic_compare_and_exchange_bool_acq (_dl_allocate_static_tls): Block signals. * elf/dl-tls.c (allocate_and_init): Return void. (_dl_update_slotinfo): Block signals, use atomic update. nptl/ChangeLog: 2014-01-03 Andrew Hunter <ahh@google.com> * nptl/Makefile (tst-tls7): New test. * nptl/tst-tls7.c: New file. * nptl/tst-tls7mod.c: New file. * nptl/allocatestack.c (init_one_static_tls): Use atomic barrier.
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r-- | elf/dl-open.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c index a9ca6b3b44..ea222d03e1 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -548,7 +548,10 @@ cannot load any more object with static TLS")); generation of the DSO we are allocating data for. */ _dl_update_slotinfo (imap->l_tls_modid); #endif - + /* We do this iteration under a signal mask in dl-reloc; why not + here? Because these symbols are new and dlopen hasn't + returned yet. So we can't possibly be racing with a TLS + access to them from another thread. */ GL(dl_init_static_tls) (imap); assert (imap->l_need_tls_init == 0); } |