aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-04-05 09:30:03 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-04-05 11:05:31 -0300
commit796b79db8cc952deb8c750b62ee8da6caafe1d88 (patch)
tree50555eb21796282c1fdc0ef2b2cbd1136f81bd2e /src
parentcb9afe0dc0c9bb19ad6755df5677351e1e7fbb22 (diff)
downloadrneovim-796b79db8cc952deb8c750b62ee8da6caafe1d88.tar.gz
rneovim-796b79db8cc952deb8c750b62ee8da6caafe1d88.tar.bz2
rneovim-796b79db8cc952deb8c750b62ee8da6caafe1d88.zip
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`
Diffstat (limited to 'src')
-rw-r--r--src/os/signal.c19
1 files changed, 14 insertions, 5 deletions
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);
+ }
+
}