Rework last change of pthread_once, create a function _thr_once_init to

reinitialize its internal locks.
This commit is contained in:
David Xu 2006-02-15 23:05:03 +00:00
parent 224409590d
commit 6f716c2f82
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=155739
3 changed files with 10 additions and 6 deletions

View File

@ -412,8 +412,7 @@ init_private(void)
_thr_umtx_init(&_keytable_lock);
_thr_umtx_init(&_thr_atfork_lock);
_thr_umtx_init(&_thr_event_lock);
_thr_once_lock = PTHREAD_MUTEX_INITIALIZER;
_thr_once_cv = PTHREAD_COND_INITIALIZER;
_thr_once_init();
_thr_spinlock_init();
_thr_list_init();

View File

@ -40,8 +40,8 @@ __weak_reference(_pthread_once, pthread_once);
#define ONCE_IN_PROGRESS 0x02
#define ONCE_MASK 0x03
pthread_mutex_t _thr_once_lock = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t _thr_once_cv = PTHREAD_COND_INITIALIZER;
static pthread_mutex_t _thr_once_lock = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t _thr_once_cv = PTHREAD_COND_INITIALIZER;
/*
* POSIX:
@ -91,3 +91,9 @@ _pthread_once(pthread_once_t *once_control, void (*init_routine) (void))
return (0);
}
void
_thr_once_init()
{
_thr_once_lock = PTHREAD_MUTEX_INITIALIZER;
_thr_once_cv = PTHREAD_COND_INITIALIZER;
}

View File

@ -649,8 +649,6 @@ extern umtx_t _rwlock_static_lock __hidden;
extern umtx_t _keytable_lock __hidden;
extern umtx_t _thr_list_lock __hidden;
extern umtx_t _thr_event_lock __hidden;
extern pthread_mutex_t _thr_once_lock __hidden;
extern pthread_cond_t _thr_once_cv __hidden;
/*
* Function prototype definitions.
@ -727,6 +725,7 @@ void _thr_suspend_check(struct pthread *) __hidden;
void _thr_assert_lock_level(void) __hidden __dead2;
void _thr_ast(struct pthread *) __hidden;
void _thr_timer_init(void) __hidden;
void _thr_once_init(void) __hidden;
void _thr_report_creation(struct pthread *curthread,
struct pthread *newthread) __hidden;
void _thr_report_death(struct pthread *curthread) __hidden;