| delorie.com/archives/browse.cgi | search | 
| X-Recipient: | archive-cygwin AT delorie DOT com | 
| DomainKey-Signature: | a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id | 
| :list-unsubscribe:list-subscribe:list-archive:list-post | |
| :list-help:sender:date:from:to:subject:message-id:reply-to | |
| :references:mime-version:content-type:in-reply-to; q=dns; s= | |
| default; b=MlVUjK12XA+zUqgC1mvP9/kgNjYw0sZrDA4kZ9RoB3ke0YOr4idju | |
| lgJr9/kOWMVMRsToJhniWp2hrdhXnqng5j+sar0scg6tr/eRaeBu7xonU/U/DNJ9 | |
| 3xX2eXK9miiZ4oOVfSFpQ0aZvExleg9Zd7vffKbET7y6rU7kkGt7UY= | |
| DKIM-Signature: | v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id | 
| :list-unsubscribe:list-subscribe:list-archive:list-post | |
| :list-help:sender:date:from:to:subject:message-id:reply-to | |
| :references:mime-version:content-type:in-reply-to; s=default; | |
| bh=77IEWOEwyq6DeA3PY2ChIKTghHU=; b=bk3E3d5XkvK2x/MdfCR27nElqd7F | |
| JqPKa4+ZqfbVEannRFFcMIK930rjbaJL2pZEQAgHAnYSaf5XXuMMClsj2vQV2tqV | |
| r6IPwoJQQFVZ2w6OUELoz1OPoHjbk9Z76pZKei1SvHXF4E63Fld+wzsg1DizavPc | |
| bKzDGWVlOyE8HM4= | |
| Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm | 
| List-Id: | <cygwin.cygwin.com> | 
| List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> | 
| List-Archive: | <http://sourceware.org/ml/cygwin/> | 
| List-Post: | <mailto:cygwin AT cygwin DOT com> | 
| List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> | 
| Sender: | cygwin-owner AT cygwin DOT com | 
| Mail-Followup-To: | cygwin AT cygwin DOT com | 
| Delivered-To: | mailing list cygwin AT cygwin DOT com | 
| Authentication-Results: | sourceware.org; auth=none | 
| X-Virus-Found: | No | 
| X-Spam-SWARE-Status: | No, score=-5.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.2 | 
| X-HELO: | calimero.vinschen.de | 
| Date: | Mon, 23 Feb 2015 13:59:14 +0100 | 
| From: | Corinna Vinschen <corinna-cygwin AT cygwin DOT com> | 
| To: | cygwin AT cygwin DOT com | 
| Subject: | Re: Unexpected EINVAL from pthread_join | 
| Message-ID: | <20150223125914.GO437@calimero.vinschen.de> | 
| Reply-To: | cygwin AT cygwin DOT com | 
| Mail-Followup-To: | cygwin AT cygwin DOT com | 
| References: | <20150222225437 DOT 271e929b AT tukaani DOT org> <20150223121445 DOT GL437 AT calimero DOT vinschen DOT de> | 
| MIME-Version: | 1.0 | 
| In-Reply-To: | <20150223121445.GL437@calimero.vinschen.de> | 
| User-Agent: | Mutt/1.5.23 (2014-03-12) | 
--7gLe/sNPhR777EPF
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable
On Feb 23 13:14, Corinna Vinschen wrote:
> On Feb 22 22:54, Lasse Collin wrote:
> > It seems that a signal can cause pthread_join to incorrectly return
> > EINVAL. I debugged it only a little but hopefully someone finds this
> > useful:
> >=20
> > In the file thread.cc, function pthread::join, the call to cygwait may
> > return WAIT_SIGNALED if a signal is sent to the process. The switch
> > statement handling the return value assumes that only WAIT_OBJECT_0 and
> > WAIT_CANCELED are possible. The default section of the switch statement
> > has a comment "should never happen" and it returns EINVAL. It might be
> > that the problem occurs only when SA_RESTART isn't used.
>=20
> Lasse, I'm sorry, but I can't handle that quickly.  Since you're
> looking into the code and apparently understanding it, maybe you'd
> like to provide patches, too?  Please have a look at
> https://cygwin.com/contrib.html.  Patches <=3D 10 lines don't even
> need a copyright assignment.
Having said that...
I looked into the Linux man page for pthread_join(1).  It doesn't mention
signals and EINTR at all.  Then I looked into the SUSv4 pages(2) and it
only has this to say:
  The pthread_join() function shall not return an error code of [EINTR].
Searching further on this I found this(3):
  The wait in pthread_join is not broken by a signal. If a thread
  waiting in pthread_join receives a signal that is not masked, if will
  execute the signal handler, and then return to waiting in
  pthread_join.
Taking that at face value, the following patch should do the right
thing, doesn't it?
Index: thread.cc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvs/src/src/winsup/cygwin/thread.cc,v
retrieving revision 1.296
diff -u -p -r1.296 thread.cc
--- thread.cc	28 Nov 2014 20:46:13 -0000	1.296
+++ thread.cc	23 Feb 2015 12:58:59 -0000
@@ -2399,6 +2399,7 @@ pthread::join (pthread_t *thread, void *
       (*thread)->attr.joinable =3D PTHREAD_CREATE_DETACHED;
       (*thread)->mutex.unlock ();
=20
+restart_on_signal:
       switch (cygwait ((*thread)->win32_obj_id, cw_infinite, cw_sig | cw_c=
ancel))
 	{
 	case WAIT_OBJECT_0:
@@ -2413,6 +2414,9 @@ pthread::join (pthread_t *thread, void *
 	  joiner->cancel_self ();
 	  // never reached
 	  break;
+	case WAIT_SIGNALED:
+	  debug_printf ("Signal received, restart");
+	  goto restart_on_signal;
 	default:
 	  // should never happen
 	  return EINVAL;
Corinna
(1) http://linux.die.net/man/3/pthread_join
(2) http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_join.=
html
(3) http://osr600doc.sco.com/man/html.PTHREAD/pthread_join.PTHREAD.html
--=20
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat
--7gLe/sNPhR777EPF
Content-Type: application/pgp-signature
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBAgAGBQJU6yQiAAoJEPU2Bp2uRE+gMgIP/j5abRFr+2Zm/jx9jQXCJdWe
kxWLm4D+4oGdvf66ZI1/BdmH1IL0/kb5BZ6ml6h+TrlHpQ0IwyDWuoVaEFEVmocb
o1IuaPOWyefQ7haL+LdVUPUbZOqEwzxbyFWe0H6rLsmilA78lJxJfz7pCuMit/YE
Lm9bJdXxNmgLWwTJH/eJCcC//3r4J3wfv62dWrWG+zqaqNsZ5VX/B2e1KUAhudIe
tbfDjeK1lgEDEYW910FlxDCQUFKEnxu+NEfwCyTIsltoogS85COKHXw7/1mXLpqi
VtfX4Av9JvRuuxiXfCGQn7FWcOE9mbd0575yJDBcbaunjwZNPtiImUuecAYj6+E1
aVDRc20P72vUp0bGkvEy6cLXFpyJeYVNhupclOR2UBkki80pM8kC6x8aWlA0ImT2
XxTC0RCZZ7qUZ2kXc0PWsawf2Yj0RanfnzXP+7Is9A05s7i6jq3bdbBTLXwTR7H7
6is9YvCG0FJAPkYaJPl7lwhU8D3fkwuWjtSaKOqqtmxqLR0uqukKEBkRMAQuW7W9
9CqwWLdYAEk86U74spZDian78fievnktv5rnBlJikJM/FdYLnKZp0RKYzp/x6ZRI
i4wz1JwGZZDw5ZuMXXN/qWcF0dN9o4auwyS3/lJQRz+Vcdr2RaRa2BiS7mp/BVTJ
uIJ5W/1DZmAZ44syH9LK
=AmgR
-----END PGP SIGNATURE-----
--7gLe/sNPhR777EPF--
| webmaster | delorie software privacy | 
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |