0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 7.4.1379

Problem:    Channel test fails on Win32 console.
Solution:   Don't sleep when timeout is zero. Call channel_wait() before
            channel_read(). Channels are not polled during ":sleep". (Yukihiro
            Nakadaira)
This commit is contained in:
Bram Moolenaar 2016-02-21 17:20:55 +01:00
parent 65edff8f51
commit b7522a2f0c
5 changed files with 20 additions and 15 deletions

View File

@ -1582,7 +1582,7 @@ channel_wait(channel_T *channel, sock_T fd, int timeout)
&& nread > 0)
return OK;
diff = deadline - GetTickCount();
if (diff < 0)
if (diff <= 0)
break;
/* Wait for 5 msec.
* TODO: increase the sleep time when looping more often */
@ -1881,17 +1881,19 @@ channel_fd2channel(sock_T fd, int *partp)
}
return NULL;
}
# endif
# if defined(WIN32) || defined(PROTO)
/*
* Check the channels for anything that is ready to be read.
* The data is put in the read queue.
*/
void
channel_handle_events(void)
{
channel_T *channel;
int part;
static int loop = 0;
/* Skip heavily polling */
if (loop++ % 2)
return;
sock_T fd;
for (channel = first_channel; channel != NULL; channel = channel->ch_next)
{
@ -1907,7 +1909,11 @@ channel_handle_events(void)
part = PART_SOCK;
# endif
# endif
channel_read(channel, part, "channel_handle_events");
{
fd = channel->ch_part[part].ch_fd;
if (fd != INVALID_FD && channel_wait(channel, fd, 0) == OK)
channel_read(channel, part, "channel_handle_events");
}
}
}
# endif

View File

@ -2248,10 +2248,6 @@ gui_mch_wait_for_chars(int wtime)
parse_queued_messages();
#endif
#ifdef FEAT_CHANNEL
channel_handle_events();
#endif
/*
* Don't use gui_mch_update() because then we will spin-lock until a
* char arrives, instead we use GetMessage() to hang until an

View File

@ -6239,6 +6239,11 @@ has_non_ascii(char_u *s)
void
parse_queued_messages(void)
{
/* For Win32 mch_breakcheck() does not check for input, do it here. */
# if defined(WIN32) && defined(FEAT_CHANNEL)
channel_handle_events();
# endif
# ifdef FEAT_NETBEANS_INTG
/* Process the queued netbeans messages. */
netbeans_parse_messages();

View File

@ -1470,10 +1470,6 @@ WaitForChar(long msec)
serverProcessPendingMessages();
#endif
#ifdef FEAT_CHANNEL
channel_handle_events();
#endif
if (0
#ifdef FEAT_MOUSE
|| g_nMouseClick != -1

View File

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