Cygwin: pthread: Fix handle leak in pthread_once.
If pthread_once() is called with pthread_once_t initialized using PTREAD_ONCE_INIT, pthread_once does not release pthread_mutex used internally. This patch fixes that by calling pthread_mutex_destroy() in the thread which has called init_routine. Reviewed-by: Corinna Vinschen <corinna@vinschen.de> Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
This commit is contained in:
parent
15140d6df6
commit
2c5433e5da
|
@ -2060,6 +2060,9 @@ pthread::once (pthread_once_t *once_control, void (*init_routine) (void))
|
||||||
{
|
{
|
||||||
init_routine ();
|
init_routine ();
|
||||||
once_control->state = 1;
|
once_control->state = 1;
|
||||||
|
pthread_mutex_unlock (&once_control->mutex);
|
||||||
|
while (pthread_mutex_destroy (&once_control->mutex) == EBUSY);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
/* Here we must remove our cancellation handler */
|
/* Here we must remove our cancellation handler */
|
||||||
pthread_mutex_unlock (&once_control->mutex);
|
pthread_mutex_unlock (&once_control->mutex);
|
||||||
|
|
Loading…
Reference in New Issue