# HG changeset patch # User Bram Moolenaar # Date 1649193302 -7200 # Node ID d6892ed619e0fc7f6f601c6583cdde90e4b5e3c6 # Parent e080546fb0f860c960518d83f83343947f1c6a9e patch 8.2.4699: hard to reproduce hang when reading from a channel Commit: https://github.com/vim/vim/commit/75a0f3c011dfbafd2d60e87d4b2b07572df3e3ec Author: LemonBoy Date: Tue Apr 5 22:03:30 2022 +0100 patch 8.2.4699: hard to reproduce hang when reading from a channel Problem: Hard to reproduce hang when reading from a channel. Solution: Check for readahead before starting to wait. (closes https://github.com/vim/vim/issues/10093, closes #7781, closes #6364) diff --git a/src/channel.c b/src/channel.c --- 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 --- 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,