On Sat, Feb 13, 2016 at 8:20 PM, Yukihiro Nakadaira < [email protected]> wrote:
> On Sat, Feb 13, 2016 at 5:36 AM, Christian Brabandt <[email protected]> > wrote: > >> Hi Bram! >> >> On Fr, 12 Feb 2016, Bram Moolenaar wrote: >> >> > >> > Patch 7.4.1306 >> > Problem: Job control doesn't work well on MS-Windows. >> > Solution: Various fixes. (Ken Takata, Ozaki Kiichi , Yukihiro >> Nakadaira, >> > Yasuhiro Matsumoto) >> > Files: src/Make_mvc.mak, src/eval.c, src/os_unix.c, src/os_win32.c, >> > src/proto/os_unix.pro, src/proto/os_win32.pro, >> src/structs.h >> >> This patch breaks appveyor (I assume the test_channel test) >> https://ci.appveyor.com/project/chrisbra/vim/build/602 >> > > Crash is caused by WM_NETBEANS message issued by WSAAsyncSelect(). > > > let h = job_start('py testdir/test_channel.py') > let port = [] > sleep 1 > let port = readfile('Xportnr') > call delete('Xportnr') > let c = ch_open('localhost:' . port[0]) > > echo ch_sendexpr(c, 'hello!') > " => request(hello!) > " <= response(got it) (Raise WM_NETBEANS and it remains in message > queue) > > call job_stop(h) > " Remote socket is closed. > > ":sleep 1 > " Catch WM_NETBEANS. But socket is already closed. > " E896: read from channel: A non-blocking socket operation could not be > completed immediately. > > for i in range(1000) > try > throw "err" > catch > " When WM_NETBEANS is catched in ex_catch(), it breaks memory. > " ex_catch(): > " 1585 caught = vim_regexec_nl(®match, > current_exception->value, > " 1586 (colnr_T)0); > " gui_mch_update() is executed in vim_regexec_nl(). And error is > thrown. > " read_channel(): > " 1262 PERROR(_("E896: read from channel")); > " And current_exception is free()ed. > " cause_errthrow(): > " 228 discard_current_exception(); > " And the freed memory is used later. > endtry > endfor > Maybe this patch fix this problem. Error is still shown. But it might implies script or server bug. diff --git a/src/gui_w48.c b/src/gui_w48.c index 7789ef2..f2d2091 100644 --- a/src/gui_w48.c +++ b/src/gui_w48.c @@ -1783,7 +1783,14 @@ process_message(void) int channel_idx = channel_socket2idx((sock_T)msg.wParam); if (channel_idx >= 0) + { + int suppress_errthrow_save; + + suppress_errthrow_save = suppress_errthrow; + suppress_errthrow = TRUE; channel_read(channel_idx); + suppress_errthrow = suppress_errthrow_save; + } return; } #endif -- Yukihiro Nakadaira - [email protected] -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
