From b49dd2e18094697aba221a8f02cde91fe0e71955 Mon Sep 17 00:00:00 2001 From: Dimitri Staessens Date: Fri, 3 Sep 2021 18:35:52 +0200 Subject: ipcpd: Don't use sigwaitinfo() on OS X Apparently that function isn't implemented on some versions of OS X. On these systems, we can just use sigwait, but now the IPCP will also accept signals not coming from the IRMd. Signed-off-by: Dimitri Staessens Signed-off-by: Sander Vrijders --- src/ipcpd/ipcp.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c index ab2f88f8..3e1da8c4 100644 --- a/src/ipcpd/ipcp.c +++ b/src/ipcpd/ipcp.c @@ -844,9 +844,12 @@ int ipcp_boot() void ipcp_shutdown() { + siginfo_t info; sigset_t sigset; - +#ifdef __APPLE__ + int sig; +#endif sigemptyset(&sigset); sigaddset(&sigset, SIGINT); sigaddset(&sigset, SIGQUIT); @@ -856,11 +859,20 @@ void ipcp_shutdown() while(ipcp_get_state() != IPCP_NULL && ipcp_get_state() != IPCP_SHUTDOWN) { +#ifdef __APPLE__ + if (sigwait(&sigset, &sig) < 0) { +#else if (sigwaitinfo(&sigset, &info) < 0) { +#endif log_warn("Bad signal."); continue; } +#ifdef __APPLE__ + memset(&info, 0, sizeof(info)); + info.si_signo = sig; + info.si_pid = ipcpi.irmd_pid; +#endif switch(info.si_signo) { case SIGINT: case SIGTERM: -- cgit v1.2.3