From b193cd12ce74b3fc5ca69421719fe1d94d371845 Mon Sep 17 00:00:00 2001 From: eadler Date: Wed, 13 Jun 2012 03:41:22 +0000 Subject: [PATCH] MFC r236286: Fix likely race condition if wait_child() is interrupted by sigchild() PR: bin/102834 Approved by: cperciva (implicit) git-svn-id: svn://svn.freebsd.org/base/stable/8@236985 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- usr.bin/mail/popen.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/usr.bin/mail/popen.c b/usr.bin/mail/popen.c index b6dc30a39..22b49a878 100644 --- a/usr.bin/mail/popen.c +++ b/usr.bin/mail/popen.c @@ -364,12 +364,14 @@ wait_child(pid) int pid; { sigset_t nset, oset; - struct child *cp = findchild(pid); + struct child *cp; (void)sigemptyset(&nset); (void)sigaddset(&nset, SIGCHLD); (void)sigprocmask(SIG_BLOCK, &nset, &oset); + cp = findchild(pid); + while (!cp->done) (void)sigsuspend(&oset); wait_status = cp->status; -- 2.45.0