Patch 7.4.1239
Problem: JSON message after the first one is dropped.
Solution: Put remainder of message back in the queue.
Files: src/channel.c
*** ../vim-7.4.1238/src/channel.c 2016-02-02 18:19:52.790743971 +0100
--- src/channel.c 2016-02-02 18:37:40.375683988 +0100
***************
*** 567,572 ****
--- 567,579 ----
}
}
}
+
+ /* Put the unread part back into the channel.
+ * TODO: insert in front */
+ if (reader.js_buf[reader.js_used] != NUL)
+ channel_save(ch_idx, reader.js_buf + reader.js_used,
+ (int)(reader.js_end - reader.js_buf) - reader.js_used);
+ vim_free(reader.js_buf);
}
/*
***************
*** 697,704 ****
/*
* Invoke a callback for channel "idx" if needed.
*/
! static void
may_invoke_callback(int idx)
{
char_u *msg = NULL;
--- 704,712 ----
/*
* Invoke a callback for channel "idx" if needed.
+ * Return OK when a message was handled, there might be another one.
*/
! static int
may_invoke_callback(int idx)
{
char_u *msg = NULL;
***************
*** 710,731 ****
int json_mode = channels[idx].ch_json_mode;
if (channel_peek(idx) == NULL)
! return;
if (channels[idx].ch_close_cb != NULL)
/* this channel is handled elsewhere (netbeans) */
! return;
if (json_mode)
{
/* Get any json message. Return if there isn't one. */
channel_read_json(idx);
if (channel_get_json(idx, -1, &listtv) == FAIL)
! return;
if (listtv->v_type != VAR_LIST)
{
/* TODO: give error */
clear_tv(listtv);
! return;
}
list = listtv->vval.v_list;
--- 718,739 ----
int json_mode = channels[idx].ch_json_mode;
if (channel_peek(idx) == NULL)
! return FALSE;
if (channels[idx].ch_close_cb != NULL)
/* this channel is handled elsewhere (netbeans) */
! return FALSE;
if (json_mode)
{
/* Get any json message. Return if there isn't one. */
channel_read_json(idx);
if (channel_get_json(idx, -1, &listtv) == FAIL)
! return FALSE;
if (listtv->v_type != VAR_LIST)
{
/* TODO: give error */
clear_tv(listtv);
! return FALSE;
}
list = listtv->vval.v_list;
***************
*** 733,739 ****
{
/* TODO: give error */
clear_tv(listtv);
! return;
}
argv[1] = list->lv_first->li_next->li_tv;
--- 741,747 ----
{
/* TODO: give error */
clear_tv(listtv);
! return FALSE;
}
argv[1] = list->lv_first->li_next->li_tv;
***************
*** 748,761 ****
arg3 = &list->lv_last->li_tv;
channel_exe_cmd(idx, cmd, &argv[1], arg3);
clear_tv(listtv);
! return;
}
if (typetv->v_type != VAR_NUMBER)
{
/* TODO: give error */
clear_tv(listtv);
! return;
}
seq_nr = typetv->vval.v_number;
}
--- 756,769 ----
arg3 = &list->lv_last->li_tv;
channel_exe_cmd(idx, cmd, &argv[1], arg3);
clear_tv(listtv);
! return TRUE;
}
if (typetv->v_type != VAR_NUMBER)
{
/* TODO: give error */
clear_tv(listtv);
! return FALSE;
}
seq_nr = typetv->vval.v_number;
}
***************
*** 785,790 ****
--- 793,800 ----
if (listtv != NULL)
clear_tv(listtv);
vim_free(msg);
+
+ return TRUE;
}
/*
***************
*** 1244,1250 ****
int i;
for (i = 0; i < channel_count; ++i)
! may_invoke_callback(i);
}
#endif /* FEAT_CHANNEL */
--- 1254,1261 ----
int i;
for (i = 0; i < channel_count; ++i)
! while (may_invoke_callback(i) == OK)
! ;
}
#endif /* FEAT_CHANNEL */
*** ../vim-7.4.1238/src/version.c 2016-02-02 18:19:52.798743887 +0100
--- src/version.c 2016-02-02 18:41:52.225079033 +0100
***************
*** 744,745 ****
--- 744,747 ----
{ /* Add new patch number below this line */
+ /**/
+ 1239,
/**/
--
hundred-and-one symptoms of being an internet addict:
106. When told to "go to your room" you inform your parents that you
can't...because you were kicked out and banned.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.