mirror of
https://github.com/vim/vim.git
synced 2025-10-09 06:14:17 -04:00
patch 8.0.0103
Problem: May not process channel readahead. (skywind) Solution: If there is readahead don't block on input.
This commit is contained in:
@@ -3899,6 +3899,31 @@ channel_parse_messages(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return TRUE if any channel has readahead. That means we should not block on
|
||||||
|
* waiting for input.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
channel_any_readahead(void)
|
||||||
|
{
|
||||||
|
channel_T *channel = first_channel;
|
||||||
|
ch_part_T part = PART_SOCK;
|
||||||
|
|
||||||
|
while (channel != NULL)
|
||||||
|
{
|
||||||
|
if (channel_has_readahead(channel, part))
|
||||||
|
return TRUE;
|
||||||
|
if (part < PART_ERR)
|
||||||
|
++part;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
channel = channel->ch_next;
|
||||||
|
part = PART_SOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mark references to lists used in channels.
|
* Mark references to lists used in channels.
|
||||||
*/
|
*/
|
||||||
|
@@ -6264,7 +6264,7 @@ parse_queued_messages(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ELAPSED_TIMEVAL /* proto is defined in vim.h */
|
#ifdef ELAPSED_TIMEVAL /* no PROTO here, proto is defined in vim.h */
|
||||||
/*
|
/*
|
||||||
* Return time in msec since "start_tv".
|
* Return time in msec since "start_tv".
|
||||||
*/
|
*/
|
||||||
@@ -6288,9 +6288,6 @@ elapsed(DWORD start_tick)
|
|||||||
{
|
{
|
||||||
DWORD now = GetTickCount();
|
DWORD now = GetTickCount();
|
||||||
|
|
||||||
if (now < start_tick)
|
|
||||||
/* overflow */
|
|
||||||
return (long)now;
|
|
||||||
return (long)now - (long)start_tick;
|
return (long)now - (long)start_tick;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -462,6 +462,10 @@ mch_inchar(
|
|||||||
/* Checking if a job ended requires polling. Do this every 100 msec. */
|
/* Checking if a job ended requires polling. Do this every 100 msec. */
|
||||||
if (has_pending_job() && (wait_time < 0 || wait_time > 100L))
|
if (has_pending_job() && (wait_time < 0 || wait_time > 100L))
|
||||||
wait_time = 100L;
|
wait_time = 100L;
|
||||||
|
/* If there is readahead then parse_queued_messages() timed out and we
|
||||||
|
* should call it again soon. */
|
||||||
|
if ((wait_time < 0 || wait_time > 100L) && channel_any_readahead())
|
||||||
|
wait_time = 10L;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1351,9 +1351,15 @@ WaitForChar(long msec)
|
|||||||
DWORD dwWaitTime = dwEndTime - dwNow;
|
DWORD dwWaitTime = dwEndTime - dwNow;
|
||||||
|
|
||||||
#ifdef FEAT_JOB_CHANNEL
|
#ifdef FEAT_JOB_CHANNEL
|
||||||
/* Check channel while waiting input. */
|
/* Check channel while waiting for input. */
|
||||||
if (dwWaitTime > 100)
|
if (dwWaitTime > 100)
|
||||||
|
{
|
||||||
dwWaitTime = 100;
|
dwWaitTime = 100;
|
||||||
|
/* If there is readahead then parse_queued_messages() timed out
|
||||||
|
* and we should call it again soon. */
|
||||||
|
if (channel_any_readahead())
|
||||||
|
dwWaitTime = 10;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_MZSCHEME
|
#ifdef FEAT_MZSCHEME
|
||||||
if (mzthreads_allowed() && p_mzq > 0
|
if (mzthreads_allowed() && p_mzq > 0
|
||||||
|
@@ -44,6 +44,7 @@ int channel_poll_check(int ret_in, void *fds_in);
|
|||||||
int channel_select_setup(int maxfd_in, void *rfds_in, void *wfds_in);
|
int channel_select_setup(int maxfd_in, void *rfds_in, void *wfds_in);
|
||||||
int channel_select_check(int ret_in, void *rfds_in, void *wfds_in);
|
int channel_select_check(int ret_in, void *rfds_in, void *wfds_in);
|
||||||
int channel_parse_messages(void);
|
int channel_parse_messages(void);
|
||||||
|
int channel_any_readahead(void);
|
||||||
int set_ref_in_channel(int copyID);
|
int set_ref_in_channel(int copyID);
|
||||||
ch_part_T channel_part_send(channel_T *channel);
|
ch_part_T channel_part_send(channel_T *channel);
|
||||||
ch_part_T channel_part_read(channel_T *channel);
|
ch_part_T channel_part_read(channel_T *channel);
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
103,
|
||||||
/**/
|
/**/
|
||||||
102,
|
102,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user