From 8d2b587f711853d34e01194a7d4450e56a283b64 Mon Sep 17 00:00:00 2001 From: Staroselskii Georgii Date: Wed, 13 Jul 2016 16:51:44 +0300 Subject: [PATCH] AP_HAL_Linux: RPI: set signal handler iff nobody has already done it before --- libraries/AP_HAL_Linux/RCInput_RPI.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libraries/AP_HAL_Linux/RCInput_RPI.cpp b/libraries/AP_HAL_Linux/RCInput_RPI.cpp index b8178fc495..8c5feaaf8c 100644 --- a/libraries/AP_HAL_Linux/RCInput_RPI.cpp +++ b/libraries/AP_HAL_Linux/RCInput_RPI.cpp @@ -378,10 +378,14 @@ void RCInput_RPI::set_sigaction() { for (int i = 0; i < NSIG; i++) { //catch all signals (like ctrl+c, ctrl+z, ...) to ensure DMA is disabled - struct sigaction sa; + struct sigaction sa, sa_old; memset(&sa, 0, sizeof(sa)); - sa.sa_handler = RCInput_RPI::termination_handler; - sigaction(i, &sa, NULL); + sigaction(i, nullptr, &sa_old); + + if (sa_old.sa_handler == nullptr) { + sa.sa_handler = RCInput_RPI::termination_handler; + sigaction(i, &sa, nullptr); + } } }