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:
parent
65edff8f51
commit
b7522a2f0c
@ -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
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -1470,10 +1470,6 @@ WaitForChar(long msec)
|
||||
serverProcessPendingMessages();
|
||||
#endif
|
||||
|
||||
#ifdef FEAT_CHANNEL
|
||||
channel_handle_events();
|
||||
#endif
|
||||
|
||||
if (0
|
||||
#ifdef FEAT_MOUSE
|
||||
|| g_nMouseClick != -1
|
||||
|
@ -747,6 +747,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1379,
|
||||
/**/
|
||||
1378,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user