Re: sem_wait(3) is not always a cancellation point

From: David Xu <davidxu_at_freebsd.org>
Date: Thu, 13 Mar 2014 14:04:04 +0800
On 2014/03/13 04:33, Eric van Gyzen wrote:
> -current:
>
>>From my understand of POSIX, sem_wait(3) should always be a cancellation
> point.  However, when the semaphore's count is positive and the caller
> successfully decrements the count, sem_wait(3) does not call
> _pthread_testcancel(), so it's not a cancellation point.
>
> See this totally contrived test case:
>
>          http://www.vangyzen.net/FreeBSD/patches/sem_wait_cancel.c
>
> This patch seems like an appropriate fix:
>
>          http://www.vangyzen.net/FreeBSD/patches/sem_wait_cancel.diff
>
> It adds a call to _pthread_testcancel() in the same location as
> _libc_sem_timedwait_compat() in libc/gen/sem.c.
>
> Is this a real bug, or am I missing something?
>
> Eric

You are right, the _pthread_testcancel() call should be added.

Thanks,
David Xu
Received on Thu Mar 13 2014 - 05:03:24 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:47 UTC