From b6194b8cb9e4409a8eb3ae42acd17353a9598e1d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 19 Jan 2007 14:10:13 +0000 Subject: [PATCH] Note that the SIGCHLD handler could be re-entered. --- src/core/resolv.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/core/resolv.c b/src/core/resolv.c index 60195ba9..d52c7481 100644 --- a/src/core/resolv.c +++ b/src/core/resolv.c @@ -103,8 +103,14 @@ static void resolv_sigchld ( struct async *async, container_of ( async, struct resolution, async ); int rc; - /* If this child succeeded, kill all the others and return */ + /* Reap the child */ async_wait ( async, &rc, 1 ); + + /* If this child succeeded, kill all the others and return. + * Killing the others means that this routine may be + * re-entered; this is safe provided that no child returns a + * success exit status when killed by SIGKILL. + */ if ( rc == 0 ) { async_signal_children ( async, SIGKILL ); async_done ( async, 0 );