mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
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.
This commit is contained in:
@@ -2265,6 +2265,7 @@ test_arglist \
|
|||||||
test_taglist \
|
test_taglist \
|
||||||
test_tcl \
|
test_tcl \
|
||||||
test_terminal \
|
test_terminal \
|
||||||
|
test_terminal_fail \
|
||||||
test_textobjects \
|
test_textobjects \
|
||||||
test_timers \
|
test_timers \
|
||||||
test_true_false \
|
test_true_false \
|
||||||
|
@@ -2939,6 +2939,7 @@ remove_from_writeque(writeq_T *wq, writeq_T *entry)
|
|||||||
wq->wq_prev = NULL;
|
wq->wq_prev = NULL;
|
||||||
else
|
else
|
||||||
wq->wq_next->wq_prev = NULL;
|
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_SOCK);
|
||||||
channel_clear_one(channel, PART_OUT);
|
channel_clear_one(channel, PART_OUT);
|
||||||
channel_clear_one(channel, PART_ERR);
|
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);
|
free_callback(channel->ch_callback, channel->ch_partial);
|
||||||
channel->ch_callback = NULL;
|
channel->ch_callback = NULL;
|
||||||
channel->ch_partial = NULL;
|
channel->ch_partial = NULL;
|
||||||
|
@@ -194,6 +194,7 @@ NEW_TESTS = test_arabic.res \
|
|||||||
test_system.res \
|
test_system.res \
|
||||||
test_tcl.res \
|
test_tcl.res \
|
||||||
test_terminal.res \
|
test_terminal.res \
|
||||||
|
test_terminal_fail.res \
|
||||||
test_textobjects.res \
|
test_textobjects.res \
|
||||||
test_undo.res \
|
test_undo.res \
|
||||||
test_usercommands.res \
|
test_usercommands.res \
|
||||||
|
@@ -608,14 +608,6 @@ func Test_terminal_redir_file()
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if has('unix')
|
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')
|
call writefile(['one line'], 'Xfile')
|
||||||
let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'})
|
let buf = term_start('cat', {'in_io': 'file', 'in_name': 'Xfile'})
|
||||||
call term_wait(buf)
|
call term_wait(buf)
|
||||||
|
21
src/testdir/test_terminal_fail.vim
Normal file
21
src/testdir/test_terminal_fail.vim
Normal file
@@ -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
|
@@ -769,6 +769,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1083,
|
||||||
/**/
|
/**/
|
||||||
1082,
|
1082,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user