Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Aug 2010 11:20:22 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        David Xu <davidxu@freebsd.org>
Cc:        freebsd-threads@freebsd.org
Subject:   Re: PTHREAD_CANCEL_DEFERRED
Message-ID:  <20100816082022.GO2396@deviant.kiev.zoral.com.ua>
In-Reply-To: <4C6926D0.2020909@freebsd.org>
References:  <4C63D42D.8040606@freebsd.org> <20100812083006.GR2396@deviant.kiev.zoral.com.ua> <4C642E9B.8000300@freebsd.org> <20100812093353.GS2396@deviant.kiev.zoral.com.ua> <4C650D0F.9060905@freebsd.org> <4C650F27.1000305@freebsd.org> <20100813141402.GW2396@deviant.kiev.zoral.com.ua> <4C65E0FE.2030803@freebsd.org> <20100814144715.GB2396@deviant.kiev.zoral.com.ua> <4C6926D0.2020909@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--dDdTYOCAbkFo0FQC
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mon, Aug 16, 2010 at 11:53:52AM +0000, David Xu wrote:
> Kostik Belousov wrote:
>=20
> >Missed this, thank you for pointing it out. Updated patch is at
> >http://people.freebsd.org/~kib//misc/cancel_defer.2.patch
>=20
> I found SIGCANCEL is masked by
> thr_cancel_deferred(THR_CANCEL_DEFERRED_ENABLE), issignal() does not
> return the masked signal, so how a cancellation point syscall can be
> interrupted by SIGCANCEL ? I think if a thread being canceled calls
> msleep(PCATCH), it should find the signal and return EINTR.
>=20
Yes, for EINTR and ERESTART case, the thread should be canceled.
Please look at the check_cancel() helper that is called at the syscall
entry and before return. If the check_cancel() decided that the syscall
is cancellation point and the thread in the deferred cancel mode, and
EINTR or ERESTART is supplied as error code, then SIGCANCEL is removed
from the thread signal mask. It is restored in the mask by ast().

--dDdTYOCAbkFo0FQC
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)

iEYEARECAAYFAkxo9MYACgkQC3+MBN1Mb4jAWQCdEG8Xj3rfSPgmIi1j3sDDpW5R
Fq8AoPY7vH6ph1gGyZHMkVey7BePOFLe
=hWdZ
-----END PGP SIGNATURE-----

--dDdTYOCAbkFo0FQC--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100816082022.GO2396>