diff options
author | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-10 09:19:27 -0300 |
---|---|---|
committer | Thiago de Arruda <tpadilha84@gmail.com> | 2014-11-10 18:47:46 -0300 |
commit | 3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d (patch) | |
tree | 888527c926d8117c21d291311e34f271614cf66f /src | |
parent | ab826d88f69a3cc2785baa6367d3bd01dbb84627 (diff) | |
download | rneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.tar.gz rneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.tar.bz2 rneovim-3e8ef31ada1f2ae0b0cd58bb25d5516d19eee82d.zip |
shell: Use job_write_cb for closing stdin
Commit @45525853d352 removed usage of the `job_write_cb` for closing stdin due
to a memory error, but that doesn't work anymore because `job_close_in` closes
stdin immediately, possibly trimming input data before it is fully written.
Since most memory issues with jobs have been fixed, re-add the `job_write_cb`
call to ensure stdin is only closed when it should. Also add tests for scenarios
where using the callback makes a difference.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/os/shell.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c index 7449ac637c..1b279f18f5 100644 --- a/src/nvim/os/shell.c +++ b/src/nvim/os/shell.c @@ -244,6 +244,9 @@ static int shell(const char *cmd, job_stop(job); return -1; } + // close the input stream after everything is written + job_write_cb(job, shell_write_cb); + } else { // close the input stream, let the process know that no more input is // coming job_close_in(job); @@ -447,3 +450,9 @@ static void write_output(char *output, size_t remaining) curbuf->b_no_eol_lnum = 0; } } + +static void shell_write_cb(WStream *wstream, void *data, int status) +{ + Job *job = data; + job_close_in(job); +} |