[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