0
0
mirror of https://github.com/vim/vim.git synced 2025-09-24 03:44:06 -04:00

patch 7.4.1623

Problem:    All Channels share the message ID, it keeps getting bigger.
Solution:   Use a message ID per channel.
This commit is contained in:
Bram Moolenaar
2016-03-20 19:31:33 +01:00
parent 17b56c9f83
commit e9d6a298df
4 changed files with 5 additions and 14 deletions

View File

@@ -2294,17 +2294,6 @@ channel_wait(channel_T *channel, sock_T fd, int timeout)
return FAIL; return FAIL;
} }
/*
* Return a unique ID to be used in a message.
*/
int
channel_get_id(void)
{
static int next_id = 1;
return next_id++;
}
/* /*
* Read from channel "channel" for as long as there is something to read. * Read from channel "channel" for as long as there is something to read.
* "part" is PART_SOCK, PART_OUT or PART_ERR. * "part" is PART_SOCK, PART_OUT or PART_ERR.
@@ -2787,7 +2776,7 @@ ch_expr_common(typval_T *argvars, typval_T *rettv, int eval)
return; return;
} }
id = channel_get_id(); id = ++channel->ch_last_msg_id;
text = json_encode_nr_expr(id, &argvars[1], text = json_encode_nr_expr(id, &argvars[1],
ch_mode == MODE_JS ? JSON_JS : 0); ch_mode == MODE_JS ? JSON_JS : 0);
if (text == NULL) if (text == NULL)

View File

@@ -24,10 +24,9 @@ void channel_close(channel_T *channel, int invoke_close_cb);
char_u *channel_peek(channel_T *channel, int part); char_u *channel_peek(channel_T *channel, int part);
void channel_clear(channel_T *channel); void channel_clear(channel_T *channel);
void channel_free_all(void); void channel_free_all(void);
int channel_get_id(void);
void channel_read(channel_T *channel, int part, char *func); void channel_read(channel_T *channel, int part, char *func);
char_u *channel_read_block(channel_T *channel, int part, int timeout); char_u *channel_read_block(channel_T *channel, int part, int timeout);
int channel_read_json_block(channel_T *channel, int part, int timeout, int id, typval_T **rettv); int channel_read_json_block(channel_T *channel, int part, int timeout_arg, int id, typval_T **rettv);
void common_channel_read(typval_T *argvars, typval_T *rettv, int raw); void common_channel_read(typval_T *argvars, typval_T *rettv, int raw);
channel_T *channel_fd2channel(sock_T fd, int *partp); channel_T *channel_fd2channel(sock_T fd, int *partp);
void channel_handle_events(void); void channel_handle_events(void);

View File

@@ -1380,6 +1380,7 @@ struct channel_S {
channel_T *ch_prev; channel_T *ch_prev;
int ch_id; /* ID of the channel */ int ch_id; /* ID of the channel */
int ch_last_msg_id; /* ID of the last message */
chanpart_T ch_part[4]; /* info for socket, out, err and in */ chanpart_T ch_part[4]; /* info for socket, out, err and in */

View File

@@ -748,6 +748,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1623,
/**/ /**/
1622, 1622,
/**/ /**/