diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-09-09 18:16:43 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-09-09 18:16:43 +0200 |
commit | 5b5adf5b9cd226d775643872e65c62674d6ada95 (patch) | |
tree | 4b06972c0929cd46fd955b5a25e872727ffe450d /src | |
parent | 9d18961323a2a5c3b609c98ce0d78613c71f3532 (diff) | |
download | vim-5b5adf5b9cd226d775643872e65c62674d6ada95.zip |
patch 8.0.1083: leaking memory in input part of channel
Problem: Leaking memory in input part of channel.
Solution: Clear the input part of channel. Free the entry. Move failing
command test to a separate file to avoid bogus leak reports
clouding tests that should not leak.
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile | 1 | ||||
-rw-r--r-- | src/channel.c | 3 | ||||
-rw-r--r-- | src/testdir/Make_all.mak | 1 | ||||
-rw-r--r-- | src/testdir/test_terminal.vim | 8 | ||||
-rw-r--r-- | src/testdir/test_terminal_fail.vim | 21 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 27 insertions, 9 deletions
diff --git a/src/Makefile b/src/Makefile index 27615fa92..0cb00589f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -2265,6 +2265,7 @@ test_arglist \ test_taglist \ test_tcl \ test_terminal \ + test_terminal_fail \ test_textobjects \ test_timers \ test_true_false \ diff --git a/src/channel.c b/src/channel.c index 0e9a58007..fa1898db9 100644 --- a/src/channel.c +++ b/src/channel.c @@ -2939,6 +2939,7 @@ remove_from_writeque(writeq_T *wq, writeq_T *entry) wq->wq_prev = NULL; else wq->wq_next->wq_prev = NULL; + vim_free(entry); } /* @@ -2990,7 +2991,7 @@ channel_clear(channel_T *channel) channel_clear_one(channel, PART_SOCK); channel_clear_one(channel, PART_OUT); channel_clear_one(channel, PART_ERR); - /* there is no callback or queue for PART_IN */ + channel_clear_one(channel, PART_IN); free_callback(channel->ch_callback, channel->ch_partial); channel->ch_callback = NULL; channel->ch_partial = NULL; diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak index ad95b1b6e..b979c975b 100644 --- a/src/testdir/Make_all.mak +++ b/src/testdir/Make_all.mak @@ -194,6 +194,7 @@ NEW_TESTS = test_arabic.res \ test_system.res \ test_tcl.res \ test_terminal.res \ + test_terminal_fail.res \ test_textobjects.res \ test_undo.res \ test_usercommands.res \ diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim index 004c2c37f..738c3d4de 100644 --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -608,14 +608,6 @@ func Test_terminal_redir_file() endif if has('unix') - let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'}) - call term_wait(buf) - call WaitFor('len(readfile("Xfile")) > 0') - call assert_match('executing job failed', readfile('Xfile')[0]) - call WaitFor('!&modified') - call delete('Xfile') - bwipe - call writefile(['one line'], 'Xfile') let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'}) call term_wait(buf) diff --git a/src/testdir/test_terminal_fail.vim b/src/testdir/test_terminal_fail.vim new file mode 100644 index 000000000..aad4b98cb --- /dev/null +++ b/src/testdir/test_terminal_fail.vim @@ -0,0 +1,21 @@ +" This test is in a separate file, because it usually causes reports for memory +" leaks under valgrind. That is because when fork/exec fails memory is not +" freed. Since the process exists right away it's not a real leak. + +if !has('terminal') + finish +endif + +source shared.vim + +func Test_terminal_redir_fails() + if has('unix') + let buf = term_start('xyzabc', {'err_io': 'file', 'err_name': 'Xfile'}) + call term_wait(buf) + call WaitFor('len(readfile("Xfile")) > 0') + call assert_match('executing job failed', readfile('Xfile')[0]) + call WaitFor('!&modified') + call delete('Xfile') + bwipe + endif +endfunc diff --git a/src/version.c b/src/version.c index f2fde0055..8c610b71e 100644 --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1083, +/**/ 1082, /**/ 1081, |