X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-debug.c;h=a9e645ece21b4e4021886b121f4650f55571c081;hb=65353dce81a629e042800bb7b86fcd869a76727e;hp=228f710e2d4be7ab72ccd51d90208c1769f731b7;hpb=b2114e0f626ed42a5d6154c681486b4edb19fbbf;p=src%2Fapp-framework-binder.git diff --git a/src/afb-debug.c b/src/afb-debug.c index 228f710e..a9e645ec 100644 --- a/src/afb-debug.c +++ b/src/afb-debug.c @@ -1,5 +1,5 @@ /* - Copyright 2017 IoT.bzh + Copyright (C) 2015-2020 "IoT.bzh" author: José Bollo @@ -30,6 +30,9 @@ #include #include #include +#if !defined(NO_CALL_PERSONALITY) +#include +#endif #include "verbose.h" @@ -77,36 +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_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); - } else 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); - } + 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