diff options
author | LemonBoy <thatlemon@gmail.com> | 2022-04-05 22:03:30 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-04-05 22:03:30 +0100 |
commit | 75a0f3c011dfbafd2d60e87d4b2b07572df3e3ec (patch) | |
tree | 7c16ad5e0807724f07b1f317676e38bd111daa6b | |
parent | aa7d0c233532fb9d8c2876ea8e978a82b12c377f (diff) | |
download | vim-git-75a0f3c011dfbafd2d60e87d4b2b07572df3e3ec.tar.gz |
patch 8.2.4699: hard to reproduce hang when reading from a channelv8.2.4699
Problem: Hard to reproduce hang when reading from a channel.
Solution: Check for readahead before starting to wait. (closes #10093,
closes #7781, closes #6364)
-rw-r--r-- | src/channel.c | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/channel.c b/src/channel.c index 75fc89560..f8a819437 100644 --- a/src/channel.c +++ b/src/channel.c @@ -3997,6 +3997,11 @@ channel_read_json_block( if (channel_parse_messages()) continue; + // channel_parse_messages() may fill the queue with new data to + // process. + if (channel_has_readahead(channel, part)) + continue; + // Wait for up to the timeout. If there was an incomplete message // use the deadline for that. timeout = timeout_arg; diff --git a/src/version.c b/src/version.c index 23b2a1e2b..120633f0f 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4699, +/**/ 4698, /**/ 4697, |