Skip to content
Snippets Groups Projects
Commit 7359ad28 authored by Per Cederqvist's avatar Per Cederqvist Committed by Magnus Holmgren
Browse files

(use_sa_restart): New static variable.

(sig_on_signal): Add SA_RESTART if appropriate.
(oop_signal_new): Don't just blindly set FD_CLOEXEC and
	O_NONBLOCK.  Read the old settings first.
(oop_signal_use_sa_restart): New function.

Signed-off-by: default avatarMagnus Holmgren <magnus@kibibyte.se>
parent 1c2f100d
No related branches found
No related tags found
No related merge requests found
...@@ -120,4 +120,5 @@ oop_adapter_signal *oop_signal_new(oop_source *); ...@@ -120,4 +120,5 @@ oop_adapter_signal *oop_signal_new(oop_source *);
void oop_signal_delete(oop_adapter_signal *); void oop_signal_delete(oop_adapter_signal *);
oop_source *oop_signal_source(oop_adapter_signal *); oop_source *oop_signal_source(oop_adapter_signal *);
void oop_signal_use_sa_restart(void);
#endif #endif
...@@ -35,6 +35,7 @@ struct oop_adapter_signal { ...@@ -35,6 +35,7 @@ struct oop_adapter_signal {
}; };
static struct oop_adapter_signal *sig_owner[OOP_NUM_SIGNALS]; static struct oop_adapter_signal *sig_owner[OOP_NUM_SIGNALS];
static int use_sa_restart = 0;
static oop_adapter_signal *verify_source(oop_source *source) { static oop_adapter_signal *verify_source(oop_source *source) {
oop_adapter_signal * const s = (oop_adapter_signal *) source; oop_adapter_signal * const s = (oop_adapter_signal *) source;
...@@ -137,6 +138,7 @@ static void sig_on_signal(oop_source *source,int sig, ...@@ -137,6 +138,7 @@ static void sig_on_signal(oop_source *source,int sig,
#ifdef SA_NODEFER #ifdef SA_NODEFER
act.sa_flags &= ~SA_NODEFER; act.sa_flags &= ~SA_NODEFER;
#endif #endif
if (use_sa_restart) act.sa_flags |= SA_RESTART;
sigaction(sig,&act,NULL); sigaction(sig,&act,NULL);
} }
} }
...@@ -220,3 +222,10 @@ void oop_signal_delete(oop_adapter_signal *s) { ...@@ -220,3 +222,10 @@ void oop_signal_delete(oop_adapter_signal *s) {
oop_source *oop_signal_source(oop_adapter_signal *s) { oop_source *oop_signal_source(oop_adapter_signal *s) {
return &s->oop; return &s->oop;
} }
void oop_signal_use_sa_restart(void) {
int i;
for (i = 0; i < OOP_NUM_SIGNALS; ++i)
assert(NULL == sig_owner[i] && "signal handler already registered");
use_sa_restart = 1;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment