From 796b79db8cc952deb8c750b62ee8da6caafe1d88 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Sat, 5 Apr 2014 09:30:03 -0300 Subject: Stop queueing events when signals are rejected The only exception is SIGINT, which will set `got_int` directly. This will be necessary for the new implementation of `mch_call_shell` --- src/os/signal.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/os/signal.c b/src/os/signal.c index 4b14090c56..966afa0d90 100644 --- a/src/os/signal.c +++ b/src/os/signal.c @@ -148,9 +148,18 @@ static void deadly_signal(int signum) static void signal_cb(uv_signal_t *handle, int signum) { - Event *event = (Event *)xmalloc(sizeof(Event)); - event->type = kEventSignal; - event->data = xmalloc(sizeof(int)); - *(int *)event->data = signum; - event_push(event); + Event *event; + + if (rejecting_deadly) { + if (signum == SIGINT) { + got_int = TRUE; + } + } else { + event = (Event *)xmalloc(sizeof(Event)); + event->type = kEventSignal; + event->data = xmalloc(sizeof(int)); + *(int *)event->data = signum; + event_push(event); + } + } -- cgit