bin/102834: [patch] mail(1) hangs on the sigsuspend system call
in popen.c
Andreas Longwitz
longwitz at incore.de
Wed Jun 10 16:40:06 UTC 2009
The following reply was made to PR bin/102834; it has been noted by GNATS.
From: Andreas Longwitz <longwitz at incore.de>
To: bug-followup at freebsd.org,
longwitz at incore.de
Cc:
Subject: Re: bin/102834: [patch] mail(1) hangs on the sigsuspend system call in popen.c
Date: Wed, 10 Jun 2009 18:36:43 +0200
--Boundary-00=_bE+LKNs2EjMVV2P
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
The described problem still occurs in all FreeBSD versions especially on SMP
machines. The appended patch for 6.4 Stable works without problems for more
than 3 years.
Dr. Andreas Longwitz Data Service GmbH, Beethovenstr. 2A, 23617 Stockelsdorf
--Boundary-00=_bE+LKNs2EjMVV2P
Content-Type: text/x-diff;
charset="iso 8859-15";
name="patch.popen.c.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="patch.popen.c.diff"
--- popen.c.orig 2002-06-30 07:25:06.000000000 +0200
+++ popen.c 2009-05-07 15:58:19.000000000 +0200
@@ -364,11 +364,11 @@
int pid;
{
sigset_t nset, oset;
- struct child *cp = findchild(pid);
(void)sigemptyset(&nset);
(void)sigaddset(&nset, SIGCHLD);
(void)sigprocmask(SIG_BLOCK, &nset, &oset);
+ struct child *cp = findchild(pid);
while (!cp->done)
(void)sigsuspend(&oset);
@@ -386,11 +386,11 @@
int pid;
{
sigset_t nset, oset;
- struct child *cp = findchild(pid);
(void)sigemptyset(&nset);
(void)sigaddset(&nset, SIGCHLD);
(void)sigprocmask(SIG_BLOCK, &nset, &oset);
+ struct child *cp = findchild(pid);
if (cp->done)
delchild(cp);
--Boundary-00=_bE+LKNs2EjMVV2P--
More information about the freebsd-bugs
mailing list