diff options
| -rw-r--r-- | die.c | 27 | ||||
| -rw-r--r-- | trafgen.c | 6 | 
2 files changed, 24 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); +		} +	}  } @@ -852,6 +852,11 @@ static unsigned int generate_srand_seed(void)  	return _seed;  } +static void on_panic_del_rfmon(void *arg) +{ +	leave_rfmon_mac80211(arg); +} +  int main(int argc, char **argv)  {  	bool slow = false, invoke_cpp = false, reseed = true, cpustats = true; @@ -1067,6 +1072,7 @@ int main(int argc, char **argv)  		xfree(ctx.device);  		enter_rfmon_mac80211(ctx.device_trans, &ctx.device); +		panic_func_add(on_panic_del_rfmon, ctx.device);  		sleep(0);  	} | 
