--- a/gntmain.c Mon Mar 06 16:06:52 2017 -0300
+++ b/gntmain.c Mon Sep 25 00:35:58 2017 +0200
@@ -407,10 +407,11 @@
static void (*org_winch_handler)(int);
+static void (*org_winch_handler_sa)(int, siginfo_t *, void *);
+sighandler(int sig, siginfo_t *info, void *data) @@ -419,16 +420,15 @@
g_idle_add((GSourceFunc)refresh_screen, NULL);
- signal(SIGWINCH, sighandler);
+ if (org_winch_handler_sa) + org_winch_handler_sa(sig, info, data); - signal(SIGCHLD, sighandler);
- signal(SIGINT, sighandler);
@@ -456,6 +456,10 @@
@@ -501,11 +505,25 @@
+ act.sa_sigaction = sighandler; + sigemptyset(&act.sa_mask); + act.sa_flags = SA_SIGINFO; - org_winch_handler = signal(SIGWINCH, sighandler);
+ org_winch_handler = NULL; + org_winch_handler_sa = NULL; + sigaction(SIGWINCH, &act, &oact); + if (oact.sa_flags & SA_SIGINFO) + org_winch_handler_sa = oact.sa_sigaction; + else if (oact.sa_handler != SIG_DFL && oact.sa_handler != SIG_IGN) + org_winch_handler = oact.sa_handler; - signal(SIGCHLD, sighandler);
- signal(SIGINT, sighandler);
+ sigaction(SIGCHLD, &act, NULL); + sigaction(SIGINT, &act, NULL); signal(SIGPIPE, SIG_IGN);
#if !GLIB_CHECK_VERSION(2, 36, 0)