aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2017-08-10 15:36:05 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2017-08-10 15:40:58 +0200
commit4ae97e8484cb2fae99a3a6992a7fab093c6aff75 (patch)
treee0ee7e86ccbe0e12074d1da558499e73f919cf3f
parent15059fa1ed5f94c3b5d96357c9be6adfa5ea37b0 (diff)
afb-debug: expose wait/break features
Change-Id: I197350dee4f85dfc167ea4ffcb54e6e3ceba89ad Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/afb-debug.c68
-rw-r--r--src/afb-debug.h6
2 files changed, 45 insertions, 29 deletions
diff --git a/src/afb-debug.c b/src/afb-debug.c
index db403a6b..33d161e7 100644
--- a/src/afb-debug.c
+++ b/src/afb-debug.c
@@ -80,40 +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);
+ 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);
+ personality((unsigned long)-1L);
#endif
- }
- 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);
- }
+}
+
+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
diff --git a/src/afb-debug.h b/src/afb-debug.h
index 4723cd06..51982cc8 100644
--- a/src/afb-debug.h
+++ b/src/afb-debug.h
@@ -24,6 +24,10 @@
#if defined(AFB_INSERT_DEBUG_FEATURES)
extern void afb_debug(const char *key);
+extern void afb_debug_wait(const char *key);
+extern void afb_debug_break(const char *key);
#else
-#define afb_debug(x) ((void)0)
+#define afb_debug(x) ((void)0)
+#define afb_debug_wait(x) ((void)0)
+#define afb_debug_break(x) ((void)0)
#endif