diff options
author | Vadim Kochan <vadim4j@gmail.com> | 2015-05-03 11:14:07 +0300 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2015-05-04 09:45:09 +0200 |
commit | 47fb4f6219e6936fd99d28a1e43135544d10b4ff (patch) | |
tree | b7fcee4cfd3c1e6f4bb1699fdb3a951959827523 /die.c | |
parent | aa6b0e3ae806029e803709bfaf9938ae5b1b785f (diff) |
trafgen: Delete rfmon mac80211 device on panic
Fixed case when rfmon mac80211 created device remains after trafgen
failed (for ex. - incorrect cfg file), so just delete it when panic
occured.
Also made panic handlers invoking per process and only once.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'die.c')
-rw-r--r-- | die.c | 27 |
1 files changed, 18 insertions, 9 deletions
@@ -4,28 +4,37 @@ #include "xmalloc.h" -struct panic_func { +struct panic_handler { void *arg; + pid_t pid; + bool is_enabled; void (*on_panic)(void *arg); - struct panic_func *next; + struct panic_handler *next; }; -static struct panic_func *panic_funcs; +static struct panic_handler *panic_handlers; void panic_func_add(void (*on_panic)(void *arg), void *arg) { - struct panic_func *handler = xmallocz(sizeof(*handler)); + struct panic_handler *handler = xmallocz(sizeof(*handler)); handler->arg = arg; + handler->pid = getpid(); + handler->is_enabled = true; handler->on_panic = on_panic; - handler->next = panic_funcs; - panic_funcs = handler; + handler->next = panic_handlers; + panic_handlers = handler; }; void call_on_panic_funcs(void) { - struct panic_func *it; + struct panic_handler *it; + pid_t pid = getpid(); - for (it = panic_funcs; it; it = it->next) - it->on_panic(it->arg); + for (it = panic_handlers; it; it = it->next) { + if (it->pid == pid && it->is_enabled) { + it->is_enabled = false; + it->on_panic(it->arg); + } + } } |