[vlc-devel] [PATCH 1/6] os2: implement vlc_once()

Rémi Denis-Courmont remi at remlab.net
Mon Apr 2 08:58:15 CEST 2018


Le lundi 2 avril 2018, 03:20:25 EEST Kamil Rytarowski a écrit :
> Just follow an existing approach like in NetBSD:
> 
>      53 int
>      54 pthread_once(pthread_once_t *once_control, void (*routine)(void))
>      55 {
>      56 	if (__predict_false(__uselibcstub))
>      57 		return __libc_thr_once_stub(once_control, routine);
>      58
>      59 	if (once_control->pto_done == 0) {
>      60 		pthread_mutex_lock(&once_control->pto_mutex);
>      61 		pthread_cleanup_push(&once_cleanup, &once_control->pto_mutex);
>      62 		if (once_control->pto_done == 0) {
>      63 			routine();
>      64 			once_control->pto_done = 1;
>      65 		}
>      66 		pthread_cleanup_pop(1);
>      67 	}
>      68
>      69 	return 0;
>      70 }
> 
> https://nxr.netbsd.org/xref/src/lib/libpthread/pthread_once.c#54

This violates the memory model just like the first proposal.

-- 
Rémi Denis-Courmont


More information about the vlc-devel mailing list