# HG changeset patch # User Christian Brabandt # Date 1462029304 -7200 # Node ID 31bba6f25d8438100cc52ba4e7b11ff7e73e5766 # Parent 3ccfa1e31cad0ba27bdd7578ef687591430ecb4c commit https://github.com/vim/vim/commit/715d285d79a1d97928dd717278e25e6de45d1496 Author: Bram Moolenaar Date: Sat Apr 30 17:06:31 2016 +0200 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 --- 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 } 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 *channe * -> 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 par /* 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1810, +/**/ 1809, /**/ 1808,