From: Bram Moolenaar Date: Sat, 30 Apr 2016 15:06:31 +0000 (+0200) Subject: patch 7.4.1810 X-Git-Tag: v7.4.1810 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=715d285d79a1d97928dd717278e25e6de45d1496;p=vim patch 7.4.1810 Problem: Sending DETACH after a channel was closed isn't useful. Solution: Only add DETACH for a netbeans channel. --- diff --git a/src/channel.c b/src/channel.c index aa588031c..d8e55e7b2 100644 --- a/src/channel.c +++ b/src/channel.c @@ -2595,7 +2595,7 @@ channel_free_all(void) #endif -/* Sent when the channel is found closed when reading. */ +/* Sent when the netbeans channel is found closed when reading. */ #define DETACH_MSG_RAW "DETACH\n" /* Buffer size for reading incoming messages. */ @@ -2766,7 +2766,7 @@ channel_wait(channel_T *channel, sock_T fd, int timeout) } static void -channel_close_on_error(channel_T *channel, int part, char *func) +channel_close_on_error(channel_T *channel, char *func) { /* Do not call emsg(), most likely the other end just exited. */ ch_errors(channel, "%s(): Cannot read from channel", func); @@ -2780,10 +2780,9 @@ channel_close_on_error(channel_T *channel, int part, char *func) * -> ui_breakcheck * -> gui event loop or select loop * -> channel_read() - * Don't send "DETACH" for a JS or JSON channel. + * Only send "DETACH" for a netbeans channel. */ - if (channel->ch_part[part].ch_mode == MODE_RAW - || channel->ch_part[part].ch_mode == MODE_NL) + if (channel->ch_nb_close_cb != NULL) channel_save(channel, PART_OUT, (char_u *)DETACH_MSG_RAW, (int)STRLEN(DETACH_MSG_RAW), FALSE, "PUT "); @@ -2847,7 +2846,7 @@ channel_read(channel_T *channel, int part, char *func) /* Reading a disconnection (readlen == 0), or an error. */ if (readlen <= 0) - channel_close_on_error(channel, part, func); + channel_close_on_error(channel, func); #if defined(CH_HAS_GUI) && defined(FEAT_GUI_GTK) /* signal the main loop that there is something to read */ @@ -3119,8 +3118,7 @@ channel_handle_events(void) if (r == CW_READY) channel_read(channel, part, "channel_handle_events"); else if (r == CW_ERROR) - channel_close_on_error(channel, part, - "channel_handle_events()"); + channel_close_on_error(channel, "channel_handle_events()"); } } } diff --git a/src/testdir/test_channel.vim b/src/testdir/test_channel.vim index 702fa0cbb..8e29d3235 100644 --- a/src/testdir/test_channel.vim +++ b/src/testdir/test_channel.vim @@ -1056,13 +1056,10 @@ func Test_out_close_cb() let s:counter = 1 let s:msg1 = '' - let s:msg2 = '' let s:closemsg = 0 func! OutHandler(chan, msg) if s:counter == 1 let s:msg1 = a:msg - else - let s:msg2 = a:msg endif let s:counter += 1 endfunc @@ -1075,10 +1072,9 @@ func Test_out_close_cb() \ 'close_cb': 'CloseHandler'}) call assert_equal("run", job_status(job)) try - call s:waitFor('s:closemsg != 0 && s:msg2 != ""') + call s:waitFor('s:closemsg != 0 && s:msg1 != ""') call assert_equal('quit', s:msg1) - call assert_equal('DETACH', s:msg2) - call assert_equal(3, s:closemsg) + call assert_equal(2, s:closemsg) finally call job_stop(job) delfunc OutHandler diff --git a/src/version.c b/src/version.c index 59673b515..28308a635 100644 --- a/src/version.c +++ b/src/version.c @@ -753,6 +753,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1810, /**/ 1809, /**/