kern/131506: pipes in forked procs sometimes hang under Linux emulation 2.6.16

Takahiro Kurosawa takahiro.kurosawa at gmail.com
Wed Feb 18 06:10:05 PST 2009


The following reply was made to PR kern/131506; it has been noted by GNATS.

From: Takahiro Kurosawa <takahiro.kurosawa at gmail.com>
To: Kostik Belousov <kostikbel at gmail.com>
Cc: bug-followup at freebsd.org
Subject: Re: kern/131506: pipes in forked procs sometimes hang under Linux 
	emulation 2.6.16
Date: Wed, 18 Feb 2009 23:08:05 +0900

 2009/2/18 Kostik Belousov <kostikbel at gmail.com>:
 
 > Please, resend the patch without base64-encoding, best as a plain/text
 > attachment.
 
 Sure.  Sending the patch inline...
 The attachment of my previous mail looks broken to me too.
 
 === sys/amd64/linux32/linux32_machdep.c
 ==================================================================
 --- sys/amd64/linux32/linux32_machdep.c	(revision 188741)
 +++ sys/amd64/linux32/linux32_machdep.c	(local)
 @@ -560,7 +560,7 @@
  	/* wait for the children to exit, ie. emulate vfork */
  	PROC_LOCK(p2);
  	while (p2->p_flag & P_PPWAIT)
 -	   	msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
 +		cv_wait(&p2->p_pwait, &p2->p_mtx);
  	PROC_UNLOCK(p2);
 
  	return (0);
 @@ -749,7 +749,7 @@
  		/* wait for the children to exit, ie. emulate vfork */
  		PROC_LOCK(p2);
  		while (p2->p_flag & P_PPWAIT)
 -			msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
 +			cv_wait(&p2->p_pwait, &p2->p_mtx);
  		PROC_UNLOCK(p2);
  	}
 
 === sys/i386/linux/linux_machdep.c
 ==================================================================
 --- sys/i386/linux/linux_machdep.c	(revision 188741)
 +++ sys/i386/linux/linux_machdep.c	(local)
 @@ -376,7 +376,7 @@
  	/* wait for the children to exit, ie. emulate vfork */
  	PROC_LOCK(p2);
  	while (p2->p_flag & P_PPWAIT)
 -	   	msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
 +		cv_wait(&p2->p_pwait, &p2->p_mtx);
  	PROC_UNLOCK(p2);
 
  	return (0);
 @@ -581,7 +581,7 @@
     	   	/* wait for the children to exit, ie. emulate vfork */
     	   	PROC_LOCK(p2);
  		while (p2->p_flag & P_PPWAIT)
 -   		   	msleep(td->td_proc, &p2->p_mtx, PWAIT, "ppwait", 0);
 +			cv_wait(&p2->p_pwait, &p2->p_mtx);
  		PROC_UNLOCK(p2);
  	}


More information about the freebsd-emulation mailing list