aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/os/job.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/nvim/os/job.c b/src/nvim/os/job.c
index 898d875ea3..ccd7891601 100644
--- a/src/nvim/os/job.c
+++ b/src/nvim/os/job.c
@@ -406,6 +406,12 @@ static void close_cb(uv_handle_t *handle)
job_decref(handle_get_job(handle));
}
+static void job_exited(Event event)
+{
+ Job *job = event.data;
+ process_close(job);
+}
+
static void chld_handler(uv_signal_t *handle, int signum)
{
int stat = 0;
@@ -433,7 +439,12 @@ static void chld_handler(uv_signal_t *handle, int signum)
} else if (WIFSIGNALED(stat)) {
job->status = WTERMSIG(stat);
}
- process_close(job);
+ if (exiting) {
+ // don't enqueue more events when exiting
+ process_close(job);
+ } else {
+ event_push((Event) {.handler = job_exited, .data = job}, false);
+ }
break;
}
}