Mercurial > vim
diff src/testdir/test_channel.vim @ 8055:6db4b1c863ec v7.4.1322
commit https://github.com/vim/vim/commit/3bece9fee9c02934d3e295b29d253e13d4ef26a7
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Feb 15 20:39:46 2016 +0100
patch 7.4.1322
Problem: Crash when unletting the variable that holds the channel in a
callback function. (Christian Robinson)
Solution: Increase the reference count while invoking the callback.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 15 Feb 2016 20:45:04 +0100 |
parents | 9f9b74579bdc |
children | 19304db153bc |
line wrap: on
line diff
--- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -295,3 +295,21 @@ func Test_pipe() call job_stop(job) endtry endfunc + +let s:unletResponse = '' +func s:UnletHandler(handle, msg) + let s:unletResponse = a:msg + unlet s:channelfd +endfunc + +" Test that "unlet handle" in a handler doesn't crash Vim. +func s:unlet_handle(port) + let s:channelfd = ch_open('localhost:' . a:port, s:chopt) + call ch_sendexpr(s:channelfd, "test", function('s:UnletHandler')) + sleep 10m + call assert_equal('what?', s:unletResponse) +endfunc + +func Test_unlet_handle() + call s:run_server('s:unlet_handle') +endfunc