summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-02-24 20:43:06 +0100
committerBram Moolenaar <Bram@vim.org>2016-02-24 20:43:06 +0100
commit8b374215ccd35003b95ba1df8f12e03bf8a8adc3 (patch)
treec17bebb4bfab82032e119c8060da706c70a7af7c
parent68c85fcdf31c104db21c96cd5871724e458c95ff (diff)
patch 7.4.1413v7.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.
-rw-r--r--src/channel.c8
-rw-r--r--src/eval.c2
-rw-r--r--src/netbeans.c2
-rw-r--r--src/proto/channel.pro2
-rw-r--r--src/version.c2
5 files changed, 9 insertions, 7 deletions
diff --git a/src/channel.c b/src/channel.c
index 0d46c587e1..8044c4d2d3 100644
--- 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 part, char *func)
/* 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
index b04b6c2825..db9c6b7543 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -10213,7 +10213,7 @@ f_ch_close(typval_T *argvars, typval_T *rettv UNUSED)
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
index 44a725e1ed..441ca76065 100644
--- 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
index 81935bf9a5..96b51b9773 100644
--- a/src/proto/channel.pro
+++ b/src/proto/channel.pro
@@ -17,7 +17,7 @@ int channel_collapse(channel_T *channel, int part);
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
index 84085cfae7..3d7ed57e1a 100644
--- 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,