patch 8.0.1552: may leak file descriptors when executing job
Problem: May leak file descriptors when executing job.
Solution: Close more file descriptors. (Ozaki Kiichi, closes #2531)
diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim
index 1859afc..9de3ca0 100644
--- a/src/testdir/test_channel.vim
+++ b/src/testdir/test_channel.vim
@@ -23,6 +23,21 @@
call RunServer('test_channel.py', a:testfunc, a:000)
endfunc
+" Return a list of open files.
+" Can be used to make sure no resources leaked.
+" Returns an empty list on systems where this is not supported.
+func s:get_resources()
+ let pid = getpid()
+
+ if has('mac')
+ return systemlist('lsof -p ' . pid . ' | awk ''$4~/^[0-9]*[rwu]$/&&$5=="REG"{print$NF}''')
+ elseif isdirectory('/proc/' . pid . '/fd/')
+ return systemlist('readlink /proc/' . pid . '/fd/* | grep -v ''^/dev/''')
+ else
+ return []
+ endif
+endfunc
+
let g:Ch_responseMsg = ''
func Ch_requestHandler(handle, msg)
let g:Ch_responseHandle = a:handle
@@ -620,6 +635,7 @@
call assert_equal(['line one', 'line two', 'this', 'AND this'], readfile('Xoutput'))
finally
call Stop_g_job()
+ call assert_equal(-1, match(s:get_resources(), '\(^\|/\)Xoutput$'))
call delete('Xoutput')
endtry
endfunc
@@ -663,6 +679,7 @@
call assert_equal(['line one', 'line two', 'this', 'AND this', 'that', 'AND that'], readfile('Xoutput'))
finally
call Stop_g_job()
+ call assert_equal(-1, match(s:get_resources(), '\(^\|/\)Xoutput$'))
call delete('Xoutput')
endtry
endfunc
@@ -1662,6 +1679,7 @@
call assert_equal("asdf\nasdf", getline(1))
call assert_equal("xxx\n", getline(2))
call assert_equal("\nyyy", getline(3))
+ call assert_equal(-1, match(s:get_resources(), '\(^\|/\)Xtestwrite$'))
call delete('Xtestwrite')
bwipe!