changeset 8240:60586ce747c4 v7.4.1413

commit https://github.com/vim/vim/commit/8b374215ccd35003b95ba1df8f12e03bf8a8adc3 Author: Bram Moolenaar <Bram@vim.org> 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.
author Christian Brabandt <cb@256bit.org>
date Wed, 24 Feb 2016 20:45:08 +0100
parents 6d17282085cd
children b13453cdb797
files src/channel.c src/eval.c src/netbeans.c src/proto/channel.pro src/version.c
diffstat 5 files changed, 9 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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)();
 
--- 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
--- 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;
     }
 
--- 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);
--- 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,