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

2014-03-12 Thread David Xu

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

___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"


sem_wait(3) is not always a cancellation point

2014-03-12 Thread Eric van Gyzen
-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
___
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"