Merge commit 'b9e49ad56e5776ace7c6eab2e997d5b7acb16792' into mm
This commit is contained in:
commit
89d1841616
@ -1866,15 +1866,15 @@ int pthread_getcpuclockid(pthread_t tid, clockid_t *clockid)
|
|||||||
*/
|
*/
|
||||||
int pthread_once( pthread_once_t* once_control, void (*init_routine)(void) )
|
int pthread_once( pthread_once_t* once_control, void (*init_routine)(void) )
|
||||||
{
|
{
|
||||||
static pthread_mutex_t once_lock = PTHREAD_MUTEX_INITIALIZER;
|
static pthread_mutex_t once_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER;
|
||||||
|
|
||||||
if (*once_control == PTHREAD_ONCE_INIT) {
|
if (*once_control == PTHREAD_ONCE_INIT) {
|
||||||
_normal_lock( &once_lock );
|
pthread_mutex_lock( &once_lock );
|
||||||
if (*once_control == PTHREAD_ONCE_INIT) {
|
if (*once_control == PTHREAD_ONCE_INIT) {
|
||||||
(*init_routine)();
|
(*init_routine)();
|
||||||
*once_control = ~PTHREAD_ONCE_INIT;
|
*once_control = ~PTHREAD_ONCE_INIT;
|
||||||
}
|
}
|
||||||
_normal_unlock( &once_lock );
|
pthread_mutex_unlock( &once_lock );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user