Permalink
Browse files

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.
  • Loading branch information...
brammool committed Sep 9, 2017
1 parent 9d18961 commit 5b5adf5b9cd226d775643872e65c62674d6ada95
Showing with 27 additions and 9 deletions.
  1. +1 −0 src/Makefile
  2. +2 −1 src/channel.c
  3. +1 −0 src/testdir/Make_all.mak
  4. +0 −8 src/testdir/test_terminal.vim
  5. +21 −0 src/testdir/test_terminal_fail.vim
  6. +2 −0 src/version.c
View
@@ -2265,6 +2265,7 @@ test_arglist \
test_taglist \
test_tcl \
test_terminal \
test_terminal_fail \
test_textobjects \
test_timers \
test_true_false \
View
@@ -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;
View
@@ -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 \
@@ -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)
@@ -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
View
@@ -769,6 +769,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1083,
/**/
1082,
/**/

0 comments on commit 5b5adf5

Please sign in to comment.