Mercurial > vim
diff src/testdir/test_channel.vim @ 10386:d3f0946b4a80 v8.0.0087
commit https://github.com/vim/vim/commit/7df915d113ac1981792c50e8b000c9f5f784b78b
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Nov 17 17:25:32 2016 +0100
patch 8.0.0087
Problem: When the channel callback gets job info the job may already have
been deleted. (lifepillar)
Solution: Do not delete the job when the channel is still useful. (ichizok,
closes #1242, closes #1245)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 17 Nov 2016 17:30:04 +0100 |
parents | 88331ee68367 |
children | e664ee056a84 |
line wrap: on
line diff
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -1232,6 +1232,32 @@ func Test_out_cb_lambda() endtry endfunc +func Test_close_and_exit_cb() + if !has('job') + return + endif + call ch_log('Test_close_and_exit_cb') + + let dict = {'ret': {}} + func dict.close_cb(ch) dict + let self.ret['close_cb'] = job_status(ch_getjob(a:ch)) + endfunc + func dict.exit_cb(job, status) dict + let self.ret['exit_cb'] = job_status(a:job) + endfunc + + let g:job = job_start('echo', { + \ 'close_cb': dict.close_cb, + \ 'exit_cb': dict.exit_cb, + \ }) + call assert_equal('run', job_status(g:job)) + unlet g:job + call WaitFor('len(dict.ret) >= 2') + call assert_equal(2, len(dict.ret)) + call assert_match('^\%(dead\|run\)', dict.ret['close_cb']) + call assert_equal('dead', dict.ret['exit_cb']) +endfunc + """""""""" let g:Ch_unletResponse = ''