The global errno variable needs to be saved at the begin of a signal handler
and to be restored at the end.

Signed-off-by: Rainer Müller <[EMAIL PROTECTED]>
---
 dvtm.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/dvtm.c b/dvtm.c
index 6c85746..17ac4a4 100644
--- a/dvtm.c
+++ b/dvtm.c
@@ -760,15 +760,21 @@ get_client_by_pid(pid_t pid){
 
 void
 sigchld_handler(int sig){
+       int errsv = errno;
+
        int child_status;
        signal(SIGCHLD, sigchld_handler);
        pid_t pid = wait(&child_status);
        debug("child with pid %d died\n", pid);
        client_killed = get_client_by_pid(pid);
+
+       errno = errsv;
 }
 
 void
 sigwinch_handler(int sig){
+       int errsv = errno;
+
        struct winsize ws;
        signal(SIGWINCH, sigwinch_handler);
        if(ioctl(0, TIOCGWINSZ, &ws) == -1)
@@ -777,11 +783,15 @@ sigwinch_handler(int sig){
        width = ws.ws_col;
        height = ws.ws_row;
        need_screen_resize = true;
+
+       errno = errsv;
 }
 
 void
 sigterm_handler(int sig){
+       int errsv = errno;
        running = false;
+       errno = errsv;
 }
 
 void
-- 
1.5.5.1


Reply via email to