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

Rémi Denis-Courmont remi at remlab.net
Tue Apr 3 09:04:07 CEST 2018


Le lundi 2 avril 2018, 14:30:56 EEST Kamil Rytarowski a écrit :
> On 02.04.2018 12:50, Rémi Denis-Courmont wrote:
> > Le lundi 2 avril 2018, 12:28:59 EEST Kamil Rytarowski a écrit :
> >> On 02.04.2018 08:58, Rémi Denis-Courmont wrote:
> >>> 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.
> >> 
> >> Please elaborate.
> > 
> > pto_done is accessed outside the memory model.
> 
> Do you mean that someone can change pto_done from a different place than
> the pthread_once() function?

No, I mean the function violates the memory model.

-- 
Rémi Denis-Courmont


More information about the vlc-devel mailing list