diff options
-rw-r--r-- | src/nvim/os/job.c | 13 |
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; } } |