# HG changeset patch # User Christian Brabandt # Date 1456343108 -3600 # Node ID 60586ce747c405ae6a5f68cee393f566f02bdee8 # Parent 6d17282085cdf4a7ac467999f19f06ca6bee8552 commit https://github.com/vim/vim/commit/8b374215ccd35003b95ba1df8f12e03bf8a8adc3 Author: Bram Moolenaar Date: Wed Feb 24 20:43:06 2016 +0100 patch 7.4.1413 Problem: When calling ch_close() the close callback is invoked, even though the docs say it isn't. (Christian J. Robinson) Solution: Don't call the close callback. diff --git a/src/channel.c b/src/channel.c --- a/src/channel.c +++ b/src/channel.c @@ -312,7 +312,7 @@ add_channel(void) void channel_free(channel_T *channel) { - channel_close(channel); + channel_close(channel, TRUE); if (channel->ch_next != NULL) channel->ch_next->ch_prev = channel->ch_prev; if (channel->ch_prev == NULL) @@ -1466,7 +1466,7 @@ channel_status(channel_T *channel) * This does not trigger the close callback. */ void -channel_close(channel_T *channel) +channel_close(channel_T *channel, int invoke_close_cb) { ch_log(channel, "Closing channel"); @@ -1497,7 +1497,7 @@ channel_close(channel_T *channel) } #endif - if (channel->ch_close_cb != NULL) + if (invoke_close_cb && channel->ch_close_cb != NULL) { typval_T argv[1]; typval_T rettv; @@ -1757,7 +1757,7 @@ channel_read(channel_T *channel, int par /* TODO: When reading from stdout is not possible, should we try to * keep stdin and stderr open? Probably not, assume the other side * has died. */ - channel_close(channel); + channel_close(channel, TRUE); if (channel->ch_nb_close_cb != NULL) (*channel->ch_nb_close_cb)(); diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -10213,7 +10213,7 @@ f_ch_close(typval_T *argvars, typval_T * channel_T *channel = get_channel_arg(&argvars[0]); if (channel != NULL) - channel_close(channel); + channel_close(channel, FALSE); } # ifdef FEAT_JOB diff --git a/src/netbeans.c b/src/netbeans.c --- a/src/netbeans.c +++ b/src/netbeans.c @@ -100,7 +100,7 @@ netbeans_close(void) netbeans_send_disconnect(); if (nb_channel != NULL) /* Close the socket and remove the input handlers. */ - channel_close(nb_channel); + channel_close(nb_channel, TRUE); nb_channel = NULL; } diff --git a/src/proto/channel.pro b/src/proto/channel.pro --- a/src/proto/channel.pro +++ b/src/proto/channel.pro @@ -17,7 +17,7 @@ int channel_collapse(channel_T *channel, int channel_can_write_to(channel_T *channel); int channel_is_open(channel_T *channel); char *channel_status(channel_T *channel); -void channel_close(channel_T *channel); +void channel_close(channel_T *channel, int invoke_close_cb); char_u *channel_peek(channel_T *channel, int part); void channel_clear(channel_T *channel); void channel_free_all(void); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1413, +/**/ 1412, /**/ 1411,