mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 14:21:25 +02:00
MEDIUM: signal: signal_unregister() removes every handlers
The new function signal_unregister() removes every handlers assigned to a signal. Once the handler list of the signal is empty, the signal is ignored with SIG_IGN.
This commit is contained in:
parent
db6bdfbf68
commit
31a1c1d5e7
@ -32,6 +32,7 @@ struct sig_handler *signal_register_fct(int sig, void (*fct)(struct sig_handler
|
|||||||
struct sig_handler *signal_register_task(int sig, struct task *task, int reason);
|
struct sig_handler *signal_register_task(int sig, struct task *task, int reason);
|
||||||
void signal_unregister_handler(struct sig_handler *handler);
|
void signal_unregister_handler(struct sig_handler *handler);
|
||||||
void signal_unregister_target(int sig, void *target);
|
void signal_unregister_target(int sig, void *target);
|
||||||
|
void signal_unregister(int sig);
|
||||||
void haproxy_unblock_signals();
|
void haproxy_unblock_signals();
|
||||||
|
|
||||||
static inline void signal_process_queue()
|
static inline void signal_process_queue()
|
||||||
|
20
src/signal.c
20
src/signal.c
@ -254,3 +254,23 @@ void signal_unregister_target(int sig, void *target)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Immedialtely unregister every handler assigned to a signal <sig>.
|
||||||
|
* Once the handler list is empty, the signal is ignored with SIG_IGN.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void signal_unregister(int sig)
|
||||||
|
{
|
||||||
|
struct sig_handler *sh, *shb;
|
||||||
|
|
||||||
|
if (sig < 0 || sig >= MAX_SIGNAL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
list_for_each_entry_safe(sh, shb, &signal_state[sig].handlers, list) {
|
||||||
|
LIST_DEL(&sh->list);
|
||||||
|
pool_free(pool_head_sig_handlers, sh);
|
||||||
|
}
|
||||||
|
|
||||||
|
signal(sig, SIG_IGN);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user