glibc/nptl
Martin Sebor ed225df3ad The C++ 2011 std::call_once function is specified to allow
the initialization routine to exit by throwing an exception.
Such an execution, termed exceptional, requires call_once to
propagate the exception to its caller.  A program may contain
any number of exceptional executions but only one returning
execution (which, if it exists, must be the last execution
with the same once flag).

On POSIX systems such as Linux, std::call_once is implemented
in terms of pthread_once.  However, as discussed in libstdc++
bug 66146 - "call_once not C++11-compliant on ppc64le," GLIBC's
pthread_once hangs when the initialization function exits by
throwing an exception on at least arm and ppc64 (though
apparently not on x86_64).  This effectively prevents call_once
from conforming to the C++ requirements since there doesn't
appear to be a thread-safe way to work around this problem in
libstdc++.

This patch changes pthread_once to handle gracefully init
functions that exit by throwing exceptions. It was successfully
tested on ppc64, ppc64le, and x86_64.

        [BZ #18435]
        * nptl/Makefile: Add tst-once5.cc.
        * nptl/pthreadP.h (pthread_cleanup_push, pthread_cleanup_pop):
        Remove macro redefinitions.
        * nptl/tst-once5.cc: New test.
2015-07-01 14:05:27 -06:00
..
alloca_cutoff.c
allocatestack.c Fix DTV race, assert, DTV_SURPLUS Static TLS limit, and nptl_db garbage 2015-03-17 00:31:49 -03:00
Banner
cancellation.c
ChangeLog.old
check-cpuset.h NPTL: Refactor cpu_set_t validation to be sysdeps-controlled 2015-01-08 10:49:40 -08:00
cleanup_compat.c
cleanup_defer_compat.c
cleanup_defer.c
cleanup_routine.c
cleanup.c
cond-perf.c
createthread.c
default-sched.h
descr.h NPTL: Use unsigned type for setxid_futex. 2015-06-24 18:09:32 -07:00
DESIGN-barrier.txt
DESIGN-condvar.txt
DESIGN-rwlock.txt
DESIGN-systemtap-probes.txt Remove documentation of lowlevellock systemtap probes. 2015-06-30 17:05:44 +02:00
eintr.c
elision-conf.h
errno-loc.c
events.c
forward.c
herrno.c Fix h_errno namespace (bug 18520). 2015-06-12 10:10:18 +00:00
libc_multiple_threads.c
libc_pthread_init.c
libc-cancellation.c
libc-cleanup.c
libc-lowlevellock.c
lll_timedlock_wait.c Split timed-wait functions out of nptl/lowlevellock.c. 2015-05-26 14:49:13 -07:00
lll_timedwait_tid.c Split timed-wait functions out of nptl/lowlevellock.c. 2015-05-26 14:49:13 -07:00
lowlevelbarrier.sym
lowlevelcond.sym
lowlevellock.c Split timed-wait functions out of nptl/lowlevellock.c. 2015-05-26 14:49:13 -07:00
lowlevelrobustlock.c
lowlevelrobustlock.sym
lowlevelrwlock.sym
Makefile The C++ 2011 std::call_once function is specified to allow 2015-07-01 14:05:27 -06:00
nptl-init.c Fix nptl-init.c use of INTERNAL_SYSCALL_DECL. 2015-05-22 10:20:45 -07:00
old_pthread_atfork.c
old_pthread_cond_broadcast.c
old_pthread_cond_destroy.c
old_pthread_cond_init.c
old_pthread_cond_signal.c
old_pthread_cond_timedwait.c
old_pthread_cond_wait.c
perf.c
pt-allocrtsig.c
pt-cleanup.c
pt-crti.S
pt-fork.c Clean up NPTL fork to be compat-only. 2015-02-06 10:53:07 -08:00
pt-interp.c nptl: restore .interp section in libpthread.so 2015-06-10 10:18:12 +00:00
pt-longjmp.c Clean up NPTL longjmp to be compat-only. 2015-02-06 10:53:27 -08:00
pt-raise.c
pt-system.c Clean up NPTL system to be compat-only. 2015-02-06 10:53:38 -08:00
pt-vfork.c
pthread_atfork.c
pthread_attr_destroy.c
pthread_attr_getaffinity.c
pthread_attr_getdetachstate.c
pthread_attr_getguardsize.c
pthread_attr_getinheritsched.c
pthread_attr_getschedparam.c
pthread_attr_getschedpolicy.c
pthread_attr_getscope.c
pthread_attr_getstack.c
pthread_attr_getstackaddr.c
pthread_attr_getstacksize.c
pthread_attr_init.c
pthread_attr_setaffinity.c NPTL: Refactor cpu_set_t validation to be sysdeps-controlled 2015-01-08 10:49:40 -08:00
pthread_attr_setdetachstate.c
pthread_attr_setguardsize.c
pthread_attr_setinheritsched.c
pthread_attr_setschedparam.c
pthread_attr_setschedpolicy.c
pthread_attr_setscope.c
pthread_attr_setstack.c
pthread_attr_setstackaddr.c
pthread_attr_setstacksize.c
pthread_barrier_destroy.c
pthread_barrier_init.c Fix mq_notify pthread_barrier_* namespace (bug 18544). 2015-06-17 20:16:56 +00:00
pthread_barrier_wait.c Fix mq_notify pthread_barrier_* namespace (bug 18544). 2015-06-17 20:16:56 +00:00
pthread_barrierattr_destroy.c
pthread_barrierattr_getpshared.c
pthread_barrierattr_init.c
pthread_barrierattr_setpshared.c
pthread_cancel.c
pthread_clock_gettime.c
pthread_clock_settime.c
pthread_cond_broadcast.c
pthread_cond_destroy.c
pthread_cond_init.c
pthread_cond_signal.c
pthread_cond_timedwait.c libc-vdso.h place consolidation 2015-04-20 08:51:17 -03:00
pthread_cond_wait.c
pthread_condattr_destroy.c
pthread_condattr_getclock.c
pthread_condattr_getpshared.c
pthread_condattr_init.c
pthread_condattr_setclock.c
pthread_condattr_setpshared.c
pthread_create.c
pthread_detach.c
pthread_equal.c
pthread_exit.c
pthread_getaffinity.c
pthread_getattr_default_np.c
pthread_getattr_np.c
pthread_getconcurrency.c
pthread_getcpuclockid.c
pthread_getname.c
pthread_getschedparam.c
pthread_getspecific.c
pthread_join.c
pthread_key_create.c pthread_key_create: Fix typo in comment 2015-06-11 11:48:22 +02:00
pthread_key_delete.c
pthread_kill_other_threads.c
pthread_kill.c
pthread_mutex_cond_lock.c
pthread_mutex_consistent.c
pthread_mutex_destroy.c
pthread_mutex_getprioceiling.c
pthread_mutex_init.c
pthread_mutex_lock.c Clean up BUSY_WAIT_NOP and atomic_delay. 2015-06-30 15:57:15 +02:00
pthread_mutex_setprioceiling.c
pthread_mutex_timedlock.c Clean up BUSY_WAIT_NOP and atomic_delay. 2015-06-30 15:57:15 +02:00
pthread_mutex_trylock.c
pthread_mutex_unlock.c
pthread_mutexattr_destroy.c
pthread_mutexattr_getprioceiling.c
pthread_mutexattr_getprotocol.c
pthread_mutexattr_getpshared.c
pthread_mutexattr_getrobust.c
pthread_mutexattr_gettype.c Filter out PTHREAD_MUTEX_NO_ELISION_NP bit in pthread_mutexattr_gettype (BZ #15790) 2015-02-12 09:26:00 +01:00
pthread_mutexattr_init.c
pthread_mutexattr_setprioceiling.c
pthread_mutexattr_setprotocol.c
pthread_mutexattr_setpshared.c
pthread_mutexattr_setrobust.c
pthread_mutexattr_settype.c
pthread_once.c
pthread_rwlock_destroy.c
pthread_rwlock_init.c
pthread_rwlock_rdlock.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
pthread_rwlock_timedrdlock.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
pthread_rwlock_timedwrlock.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
pthread_rwlock_tryrdlock.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
pthread_rwlock_trywrlock.c
pthread_rwlock_unlock.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
pthread_rwlock_wrlock.c
pthread_rwlockattr_destroy.c
pthread_rwlockattr_getkind_np.c
pthread_rwlockattr_getpshared.c
pthread_rwlockattr_init.c
pthread_rwlockattr_setkind_np.c
pthread_rwlockattr_setpshared.c
pthread_self.c
pthread_setaffinity.c
pthread_setattr_default_np.c NPTL: Refactor cpu_set_t validation to be sysdeps-controlled 2015-01-08 10:49:40 -08:00
pthread_setcancelstate.c
pthread_setcanceltype.c
pthread_setconcurrency.c
pthread_setegid.c
pthread_seteuid.c
pthread_setgid.c
pthread_setname.c
pthread_setregid.c
pthread_setresgid.c
pthread_setresuid.c
pthread_setreuid.c
pthread_setschedparam.c
pthread_setschedprio.c
pthread_setspecific.c
pthread_setuid.c
pthread_sigmask.c NPTL: Fix generic pthread_sigmask. 2015-01-08 14:26:51 -08:00
pthread_sigqueue.c
pthread_spin_destroy.c
pthread_spin_init.c
pthread_spin_lock.c
pthread_spin_trylock.c
pthread_spin_unlock.c
pthread_testcancel.c
pthread_timedjoin.c
pthread_tryjoin.c
pthread_yield.c
pthread-errnos.sym
pthread-pi-defines.sym
pthread-pids.h NaCl: Set tid field to a unique value. 2015-05-20 14:52:05 -07:00
pthreadP.h The C++ 2011 std::call_once function is specified to allow 2015-07-01 14:05:27 -06:00
register-atfork.c
res.c
sem_close.c Fix sem_* tdelete, tfind, tsearch, twalk namespace (bug 18536). 2015-06-17 20:11:58 +00:00
sem_destroy.c
sem_getvalue.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
sem_init.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
sem_open.c Fix sem_* tdelete, tfind, tsearch, twalk namespace (bug 18536). 2015-06-17 20:11:58 +00:00
sem_post.c BZ#18434: Fix sem_post EOVERFLOW check for [!__HAVE_64B_ATOMICS]. 2015-05-19 15:04:41 -07:00
sem_timedwait.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
sem_unlink.c
sem_wait.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
sem_waitcommon.c Make sem_timedwait use FUTEX_CLOCK_REALTIME (bug 18138). 2015-03-18 17:05:38 +00:00
semaphoreP.h
shlib-versions
sigaction.c
smp.h
sockperf.c
stack-aliasing.h
TODO
TODO-kernel
TODO-testing
tpp.c
tst-_res1.c
tst-_res1mod1.c
tst-_res1mod2.c
tst-abstime.c
tst-align3.c
tst-align.c
tst-atfork1.c
tst-atfork2.c
tst-atfork2mod.c
tst-attr1.c
tst-attr2.c
tst-attr3.c
tst-backtrace1.c
tst-bad-schedattr.c
tst-barrier1.c
tst-barrier2.c
tst-barrier3.c
tst-barrier4.c
tst-basic1.c
tst-basic2.c
tst-basic3.c
tst-basic4.c
tst-basic5.c
tst-basic6.c
tst-basic7.c
tst-cancel1.c
tst-cancel2.c
tst-cancel3.c
tst-cancel4.c Conditionalize some test code for SIGRTMIN, SA_SIGINFO. 2015-03-04 15:14:56 -08:00
tst-cancel5.c
tst-cancel6.c
tst-cancel7.c
tst-cancel8.c
tst-cancel9.c
tst-cancel10.c
tst-cancel11.c
tst-cancel12.c
tst-cancel13.c
tst-cancel14.c
tst-cancel15.c
tst-cancel16.c
tst-cancel17.c
tst-cancel18.c
tst-cancel19.c
tst-cancel20.c Conditionalize some tests' use of SA_SIGINFO. 2015-02-06 12:29:50 -08:00
tst-cancel21-static.c
tst-cancel21.c Conditionalize some tests' use of SA_SIGINFO. 2015-02-06 12:29:50 -08:00
tst-cancel22.c
tst-cancel23.c
tst-cancel24-static.cc
tst-cancel24.cc
tst-cancel25.c NPTL: Conditionalize some sanity tests for SIGCANCEL/SIGSETXID. 2015-02-06 12:31:11 -08:00
tst-cancel-self-cancelstate.c
tst-cancel-self-canceltype.c
tst-cancel-self-cleanup.c
tst-cancel-self-testcancel.c
tst-cancel-self.c
tst-cancel-wrappers.sh
tst-cancelx1.c
tst-cancelx2.c
tst-cancelx3.c
tst-cancelx4.c
tst-cancelx5.c
tst-cancelx6.c
tst-cancelx7.c
tst-cancelx8.c
tst-cancelx9.c
tst-cancelx10.c
tst-cancelx11.c
tst-cancelx12.c
tst-cancelx13.c
tst-cancelx14.c
tst-cancelx15.c
tst-cancelx16.c
tst-cancelx17.c
tst-cancelx18.c
tst-cancelx20.c
tst-cancelx21.c
tst-cleanup0.c
tst-cleanup0.expect
tst-cleanup1.c
tst-cleanup2.c Use signal rather than sigaction in nptl/tst-cleanup2. 2015-02-06 12:30:05 -08:00
tst-cleanup3.c
tst-cleanup4.c
tst-cleanup4aux.c
tst-cleanupx0.c
tst-cleanupx0.expect
tst-cleanupx1.c
tst-cleanupx2.c
tst-cleanupx3.c
tst-cleanupx4.c
tst-clock1.c
tst-clock2.c
tst-cond1.c
tst-cond2.c
tst-cond3.c
tst-cond4.c
tst-cond5.c
tst-cond6.c
tst-cond7.c
tst-cond8-static.c
tst-cond8.c
tst-cond9.c
tst-cond10.c
tst-cond11.c
tst-cond12.c
tst-cond13.c
tst-cond14.c
tst-cond15.c
tst-cond16.c
tst-cond17.c
tst-cond18.c
tst-cond19.c
tst-cond20.c
tst-cond21.c
tst-cond22.c
tst-cond23.c
tst-cond24.c
tst-cond25.c Make error checking effective in nptl/tst-cond25.c. 2015-02-16 18:11:14 +01:00
tst-cond-except.c
tst-context1.c
tst-default-attr.c
tst-detach1.c
tst-dlsym1.c
tst-eintr1.c
tst-eintr2.c
tst-eintr3.c
tst-eintr4.c
tst-eintr5.c
tst-exec1.c
tst-exec2.c
tst-exec3.c
tst-exec4.c
tst-execstack-mod.c
tst-execstack.c
tst-exit1.c
tst-exit2.c
tst-exit3.c
tst-fini1.c
tst-fini1mod.c
tst-flock1.c
tst-flock2.c
tst-fork1.c
tst-fork2.c
tst-fork3.c
tst-fork4.c
tst-getpid3.c
tst-initializers1-c89.c
tst-initializers1-c99.c
tst-initializers1-gnu89.c
tst-initializers1-gnu99.c
tst-initializers1.c Ensure `wint_t' is defined before use in include/stdio.h 2015-05-18 12:28:06 +05:30
tst-join1.c
tst-join2.c
tst-join3.c
tst-join4.c
tst-join5.c Clean up nptl/tst-join5 use of nanosleep. 2015-02-06 12:21:38 -08:00
tst-join6.c
tst-key1.c
tst-key2.c
tst-key3.c
tst-key4.c
tst-kill1.c
tst-kill2.c
tst-kill3.c
tst-kill4.c
tst-kill5.c Fix nptl/tst-kill5 not to presume SIGRTMAX exists. 2015-02-06 12:22:23 -08:00
tst-kill6.c
tst-locale1.c Conditionalize use of SIGRTMIN in nptl/tst-locale1.c. 2015-02-06 12:30:58 -08:00
tst-locale2.c
tst-mutex1.c
tst-mutex2.c
tst-mutex3.c
tst-mutex4.c
tst-mutex5.c
tst-mutex5a.c
tst-mutex6.c
tst-mutex7.c
tst-mutex7a.c
tst-mutex8-static.c
tst-mutex8.c
tst-mutex9.c
tst-mutexpi1.c
tst-mutexpi2.c
tst-mutexpi3.c
tst-mutexpi4.c
tst-mutexpi5.c
tst-mutexpi5a.c
tst-mutexpi6.c
tst-mutexpi7.c
tst-mutexpi7a.c
tst-mutexpi8-static.c
tst-mutexpi8.c
tst-mutexpi9.c
tst-mutexpp1.c
tst-mutexpp6.c
tst-mutexpp10.c
tst-oddstacklimit.c
tst-once1.c
tst-once2.c
tst-once3.c
tst-once4.c
tst-once5.cc The C++ 2011 std::call_once function is specified to allow 2015-07-01 14:05:27 -06:00
tst-oncex3.c
tst-oncex4.c
tst-popen1.c
tst-pthread-attr-affinity.c
tst-pthread-getattr.c
tst-pthread-mutexattr.c Filter out PTHREAD_MUTEX_NO_ELISION_NP bit in pthread_mutexattr_gettype (BZ #15790) 2015-02-12 09:26:00 +01:00
tst-raise1.c
tst-robust1.c
tst-robust2.c
tst-robust3.c
tst-robust4.c
tst-robust5.c
tst-robust6.c
tst-robust7.c
tst-robust8.c
tst-robust9.c
tst-robustpi1.c
tst-robustpi2.c
tst-robustpi3.c
tst-robustpi4.c
tst-robustpi5.c
tst-robustpi6.c
tst-robustpi7.c
tst-robustpi8.c
tst-robustpi9.c
tst-rwlock1.c
tst-rwlock2.c
tst-rwlock2a.c
tst-rwlock3.c
tst-rwlock4.c
tst-rwlock5.c
tst-rwlock6.c
tst-rwlock7.c
tst-rwlock8.c
tst-rwlock9.c
tst-rwlock10.c
tst-rwlock11.c
tst-rwlock12.c
tst-rwlock13.c
tst-rwlock14.c
tst-rwlock15.c Fix lost wake-up when pthread_rwlock_timedrwlock times out. 2015-06-04 15:31:59 +02:00
tst-rwlock16.c Fix missing wake-ups in pthread_rwlock_rdlock. 2015-06-04 15:34:30 +02:00
tst-sched1.c
tst-sem1.c
tst-sem2.c
tst-sem3.c
tst-sem4.c
tst-sem5.c
tst-sem6.c
tst-sem7.c
tst-sem8.c
tst-sem9.c
tst-sem10.c
tst-sem11-static.c
tst-sem11.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
tst-sem12-static.c
tst-sem12.c
tst-sem13.c Fix semaphore destruction (bug 12674). 2015-01-21 00:46:16 -05:00
tst-sem14.c
tst-sem15.c BZ#18434: Fix sem_post EOVERFLOW check for [!__HAVE_64B_ATOMICS]. 2015-05-19 15:04:41 -07:00
tst-setuid1-static.c
tst-setuid1.c
tst-setuid2.c
tst-setuid3.c
tst-signal1.c
tst-signal2.c
tst-signal3.c Conditionalize some test code for SIGRTMIN, SA_SIGINFO. 2015-03-04 15:14:56 -08:00
tst-signal4.c
tst-signal5.c
tst-signal6.c Conditionalize some test code for SIGRTMIN, SA_SIGINFO. 2015-03-04 15:14:56 -08:00
tst-signal7.c NPTL: Conditionalize some sanity tests for SIGCANCEL/SIGSETXID. 2015-02-06 12:31:11 -08:00
tst-spin1.c
tst-spin2.c
tst-spin3.c
tst-spin4.c
tst-stack1.c
tst-stack2.c
tst-stack3.c
tst-stack4.c
tst-stack4mod.c
tst-stackguard1-static.c
tst-stackguard1.c
tst-stdio1.c
tst-stdio2.c
tst-sysconf.c
tst-tls1.c
tst-tls2.c
tst-tls3.c
tst-tls3mod.c
tst-tls4.c
tst-tls4moda.c
tst-tls4modb.c
tst-tls5.c
tst-tls5.h
tst-tls5mod.c
tst-tls5moda.c
tst-tls5modb.c
tst-tls5modc.c
tst-tls5modd.c
tst-tls5mode.c
tst-tls5modf.c
tst-tls6.sh
tst-tpp.h
tst-tsd1.c
tst-tsd2.c
tst-tsd3.c
tst-tsd4.c
tst-tsd5.c
tst-tsd6.c
tst-typesizes.c
tst-umask1.c
tst-unload.c
tst-vfork1.c
tst-vfork1x.c
tst-vfork2.c
tst-vfork2x.c
unregister-atfork.c
unwind.c
unwindbuf.sym
vars.c
version.c
Versions Fix mq_notify pthread_barrier_* namespace (bug 18544). 2015-06-17 20:16:56 +00:00