X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-debug.c;h=56df0f0ca152ee4aadc4f928c775f3c2a2e449d3;hb=6f13ad1989875b5a0ce50b24211fd1fba093735f;hp=e7a5c643f21178c181e108c1e761c9be6063bb48;hpb=307a49509646a6304363135cf0790f51dfd285af;p=src%2Fapp-framework-binder.git diff --git a/src/afb-debug.c b/src/afb-debug.c index e7a5c643..56df0f0c 100644 --- a/src/afb-debug.c +++ b/src/afb-debug.c @@ -1,5 +1,5 @@ /* - Copyright 2017 IoT.bzh + Copyright (C) 2017-2019 "IoT.bzh" author: José Bollo @@ -30,6 +30,9 @@ #include #include #include +#if !defined(NO_CALL_PERSONALITY) +#include +#endif #include "verbose.h" @@ -77,37 +80,52 @@ static void handler(int signum) { } -void afb_debug(const char *key) +void afb_debug_wait(const char *key) { struct sigaction sa, psa; sigset_t ss, oss; - if (has_key(key, secure_getenv(key_env_wait))) { - NOTICE("DEBUG WAIT before %s", key); - sigfillset(&ss); - sigdelset(&ss, SIGINT); - sigprocmask(SIG_SETMASK, &ss, &oss); - sigemptyset(&ss); - sigaddset(&ss, SIGINT); - memset(&sa, 0, sizeof sa); - sa.sa_handler = handler; - sigaction(SIGINT, &sa, &psa); - indicate(key); - sigwaitinfo(&ss, NULL); - sigaction(SIGINT, &psa, NULL); - indicate(NULL); - sigprocmask(SIG_SETMASK, &oss, NULL); - NOTICE("DEBUG WAIT after %s", key); - } - if (has_key(key, secure_getenv(key_env_break))) { - NOTICE("DEBUG BREAK before %s", key); - memset(&sa, 0, sizeof sa); - sa.sa_handler = handler; - sigaction(SIGINT, &sa, &psa); - raise(SIGINT); - sigaction(SIGINT, &psa, NULL); - NOTICE("DEBUG BREAK after %s", key); - } + key = key ?: "NULL"; + NOTICE("DEBUG WAIT before %s", key); + sigfillset(&ss); + sigdelset(&ss, SIGINT); + sigprocmask(SIG_SETMASK, &ss, &oss); + sigemptyset(&ss); + sigaddset(&ss, SIGINT); + memset(&sa, 0, sizeof sa); + sa.sa_handler = handler; + sigaction(SIGINT, &sa, &psa); + indicate(key); + sigwaitinfo(&ss, NULL); + sigaction(SIGINT, &psa, NULL); + indicate(NULL); + sigprocmask(SIG_SETMASK, &oss, NULL); + NOTICE("DEBUG WAIT after %s", key); +#if !defined(NO_CALL_PERSONALITY) + personality((unsigned long)-1L); +#endif +} + +void afb_debug_break(const char *key) +{ + struct sigaction sa, psa; + + key = key ?: "NULL"; + NOTICE("DEBUG BREAK before %s", key); + memset(&sa, 0, sizeof sa); + sa.sa_handler = handler; + sigaction(SIGINT, &sa, &psa); + raise(SIGINT); + sigaction(SIGINT, &psa, NULL); + NOTICE("DEBUG BREAK after %s", key); +} + +void afb_debug(const char *key) +{ + if (has_key(key, secure_getenv(key_env_wait))) + afb_debug_wait(key); + if (has_key(key, secure_getenv(key_env_break))) + afb_debug_break(key); } #endif