[PATCH] Save errno in signal handler

Erik Ahlén erik.ahlen at avaloninnovation.com
Thu Jan 23 22:18:51 WST 2014


# HG changeset patch
# User Erik Ahlén <erik.ahlen at avaloninnovation.com>
# Date 1390486572 -3600
# Node ID ea7299f800ce161f93ee8ad684a340c643620f26
# Parent  dd0bd9231fc2444d1bd0113ebeab1129a48045a8
Save errno in child signal handler as it can interfere with select.

diff -r dd0bd9231fc2 -r ea7299f800ce svr-main.c
--- a/svr-main.c        Fri Jan 17 21:42:32 2014 +0800
+++ b/svr-main.c        Thu Jan 23 15:16:12 2014 +0100
@@ -336,6 +336,7 @@
 /* catch + reap zombie children */
 static void sigchld_handler(int UNUSED(unused)) {
        struct sigaction sa_chld;
+       int old_errno = errno;

        while(waitpid(-1, NULL, WNOHANG) > 0);

@@ -344,6 +345,8 @@
        if (sigaction(SIGCHLD, &sa_chld, NULL) < 0) {
                dropbear_exit("signal() error");
        }
+
+       errno = old_errno;
 }

 /* catch any segvs */


More information about the Dropbear mailing list