Most app don't want to crash because of unhandled SIGPIPE. It could
happen is such trivial situations like writing to socket.

Signed-off-by: Rafał Miłecki <[email protected]>
---
 uloop.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/uloop.c b/uloop.c
index 9a77ce4..7d11bbc 100644
--- a/uloop.c
+++ b/uloop.c
@@ -582,6 +582,21 @@ static void uloop_install_handler(int signum, void 
(*handler)(int), struct sigac
                sigaction(signum, act, NULL);
 }
 
+static void uloop_ignore_signal(int signum, bool ignore)
+{
+       struct sigaction s;
+
+       sigaction(signum, NULL, &s);
+
+       if (ignore) {
+               if (s.sa_handler == SIG_DFL) /* Ignore only if there isn't any 
custom handler */
+                       signal(signum, SIG_IGN);
+       } else {
+               if (s.sa_handler == SIG_IGN) /* Restore only if noone modified 
our SIG_IGN */
+                       signal(signum, SIG_DFL);
+       }
+}
+
 static void uloop_setup_signals(bool add)
 {
        static struct sigaction old_sigint, old_sigchld, old_sigterm;
@@ -589,6 +604,8 @@ static void uloop_setup_signals(bool add)
        uloop_install_handler(SIGINT, uloop_handle_sigint, &old_sigint, add);
        uloop_install_handler(SIGTERM, uloop_handle_sigint, &old_sigterm, add);
        uloop_install_handler(SIGCHLD, uloop_sigchld, &old_sigchld, add);
+
+       uloop_ignore_signal(SIGPIPE, add);
 }
 
 static int uloop_get_next_timeout(struct timeval *tv)
-- 
1.8.4.5
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to