[vlc-devel] [PATCH 1/6] os2: implement vlc_once()
KO Myung-Hun
komh78 at gmail.com
Tue Apr 3 11:22:12 CEST 2018
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 pto_done should be in the block protected by mutex ?
--
KO Myung-Hun
Using Mozilla SeaMonkey 2.7.2
Under OS/2 Warp 4 for Korean with FixPak #15
In VirtualBox v4.1.32 on Intel Core i7-3615QM 2.30GHz with 8GB RAM
Korean OS/2 User Community : http://www.os2.kr/
More information about the vlc-devel
mailing list