]> git.neil.brown.name Git - portmap.git/commitdiff
Protect errno inside signal handler.
authorAlexander Achenbach <xela@slit.de>
Fri, 20 Apr 2007 02:42:06 +0000 (12:42 +1000)
committerNeil Brown <neilb@notabene.brown>
Fri, 20 Apr 2007 02:42:06 +0000 (12:42 +1000)
From: Alexander Achenbach <xela@slit.de>

If a signal handler modifies errno at random times,
other code can be badly confused.  So in 'reap', save
and restore it.

(From debian)

portmap.c

index cdf16588131d8b8cb9baf1f01bfd88b5f52cfefb..c3c72b98c8e68b190944eb58ddbefc36b7fb7fab 100644 (file)
--- a/portmap.c
+++ b/portmap.c
@@ -673,5 +673,7 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
 
 static void reap(int ignore)
 {
+       int save_errno = errno;
        while (wait3((int *)NULL, WNOHANG, (struct rusage *)NULL) > 0);
+       errno = save_errno;
 }