freebsd-dev/lib/libpthread/thread
David Xu 639b4ccf7d Original pthread_once code has memory leak if pthread_once_t is used in
a shared library or any other dyanmic allocated data block, once
pthread_once_t is initialized, a mutex is allocated, if we unload the
shared library or free those data block, then there is no way to deallocate
the mutex, result is memory leak.
To fix this problem, we don't use mutex field in pthread_once_t, instead,
we use its state field and an internal mutex and conditional variable in
libkse to do any synchronization, we introduce a third state IN_PROGRESS to
wait if another thread is already in invoking init_routine().
Also while I am here, make pthread_once() conformed to pthread cancellation
point specification.

Reviewed by: deischen
2003-09-09 22:38:12 +00:00
..
Makefile.inc Add code to support pthread spin lock. 2003-09-09 06:57:51 +00:00
thr_aio_suspend.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_attr_destroy.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_get_np.c Avoid accessing user provided parameters in critical region. 2003-07-07 04:28:23 +00:00
thr_attr_getdetachstate.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getguardsize.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getinheritsched.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getschedparam.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getschedpolicy.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getscope.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getstack.c Add pthread_attr_getstack() and pthread_attr_setstack(). 2003-02-10 08:48:04 +00:00
thr_attr_getstackaddr.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_getstacksize.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_init.c Cleanup thread accounting. Don't reset a threads timeslice 2003-07-18 02:46:55 +00:00
thr_attr_setcreatesuspend_np.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_attr_setdetachstate.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_setguardsize.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_attr_setinheritsched.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_setschedparam.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_attr_setschedpolicy.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_setscope.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_attr_setstack.c Add pthread_attr_getstack() and pthread_attr_setstack(). 2003-02-10 08:48:04 +00:00
thr_attr_setstackaddr.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_attr_setstacksize.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_autoinit.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_barrier.c Add code to support barrier synchronous object and implement 2003-09-04 14:06:43 +00:00
thr_barrierattr.c Add code to support barrier synchronous object and implement 2003-09-04 14:06:43 +00:00
thr_cancel.c If thread mode is not activated yet, don't do extra work. 2003-08-10 22:07:28 +00:00
thr_clean.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_close.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_concurrency.c Allow the concurrency level to be reduced. 2003-08-30 12:09:16 +00:00
thr_cond.c Remove repeated macro THR_IN_CONDQ. 2003-09-04 07:46:26 +00:00
thr_condattr_destroy.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_condattr_init.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_creat.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_create.c Fix an off by one error in the number of arguments passed to 2003-08-06 00:23:40 +00:00
thr_detach.c Move idle kse wakeup to outside of regions where locks are held. 2003-07-23 02:11:07 +00:00
thr_equal.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_exit.c Direct call exit if thread was never created. This makes it safe to call 2003-08-18 04:03:08 +00:00
thr_fcntl.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_find_thread.c o Eliminate upcall for PTHREAD_SYSTEM_SCOPE thread, now it 2003-07-17 23:02:30 +00:00
thr_fork.c Save and restore errno around sigprocmask. 2003-08-19 03:33:51 +00:00
thr_fsync.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_getprio.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_getschedparam.c Avoid accessing user provided parameters in critical region. 2003-07-07 04:28:23 +00:00
thr_info.c Correctly print signal mask, the bug was introduced by cut and paste 2003-07-07 12:12:33 +00:00
thr_init.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_join.c Avoid accessing user provided parameters in critical region. 2003-07-07 04:28:23 +00:00
thr_kern.c Add code to support barrier synchronous object and implement 2003-09-04 14:06:43 +00:00
thr_kill.c o Use a daemon thread to monitor signal events in kernel, if pending 2003-06-28 09:55:02 +00:00
thr_main_np.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_mattr_init.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_mattr_kind_np.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_msync.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_multi_np.c Revamp suspend and resume. While I'm here add pthread_suspend_all_np() 2002-05-24 04:32:28 +00:00
thr_mutex_prioceiling.c Avoid accessing user provided parameters in critical region. 2003-07-07 04:28:23 +00:00
thr_mutex_protocol.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_mutex.c Add code to support barrier synchronous object and implement 2003-09-04 14:06:43 +00:00
thr_mutexattr_destroy.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_nanosleep.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_once.c Original pthread_once code has memory leak if pthread_once_t is used in 2003-09-09 22:38:12 +00:00
thr_open.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_pause.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_poll.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_printf.c Support printing 64 bits pointer and long integer. 2003-08-19 08:29:33 +00:00
thr_priority_queue.c o Don't add a scope system thread's KSE to the list of available 2003-04-28 23:56:12 +00:00
thr_private.h Original pthread_once code has memory leak if pthread_once_t is used in 2003-09-09 22:38:12 +00:00
thr_pselect.c Eek, staticize a couple of functions that shouldn't 2003-05-19 23:04:50 +00:00
thr_pspinlock.c Add code to support pthread spin lock. 2003-09-09 06:57:51 +00:00
thr_raise.c Override libc function raise(), in threading mode, raise() will 2003-07-19 05:25:49 +00:00
thr_read.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_readv.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_resume_np.c Move idle kse wakeup to outside of regions where locks are held. 2003-07-23 02:11:07 +00:00
thr_rtld.c Tweak rtld lock to allow recursive on reader lock and detect recursive 2003-08-10 22:15:03 +00:00
thr_rwlock.c Add small piece of code to support pthread_rwlock_timedrdlock and 2003-09-06 00:07:52 +00:00
thr_rwlockattr.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_select.c If select() is only used for sleep, convert it to nanosleep, 2003-07-03 13:36:29 +00:00
thr_self.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_sem.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_seterrno.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_setprio.c Make the changes needed for libpthread to compile in its new home. 2002-09-16 08:45:36 +00:00
thr_setschedparam.c Add an i386-specifc hack to always set %gs. There still seems 2003-04-21 04:02:56 +00:00
thr_sig.c Repost masked signal to kernel for scope system thread, it hardly happens 2003-08-21 22:02:18 +00:00
thr_sigaction.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_sigmask.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_sigpending.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_sigprocmask.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_sigsuspend.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_sigwait.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00
thr_single_np.c Revamp suspend and resume. While I'm here add pthread_suspend_all_np() 2002-05-24 04:32:28 +00:00
thr_sleep.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_spec.c Add back a loop for up to PTHREAD_DESTRUCTOR_ITERATIONS to 2003-08-20 02:34:14 +00:00
thr_spinlock.c Don't really spin on a spinlock; silently convert it to the same 2003-05-29 17:10:45 +00:00
thr_stack.c Use mmap retuned value. 2003-06-28 09:48:05 +00:00
thr_suspend_np.c Fix suspend and resume. 2003-05-04 16:17:01 +00:00
thr_switch_np.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_system.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_tcdrain.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_vfork.c
thr_wait4.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_wait.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_waitpid.c Don't assume sizeof(long) = sizeof(int) on x86; use int 2003-09-03 17:56:26 +00:00
thr_write.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_writev.c Revamp libpthread so that it has a chance of working in an SMP 2003-04-18 05:04:16 +00:00
thr_yield.c Treat initial thread as scope system thread when KSE mode is not activated 2003-08-18 03:58:29 +00:00