-
-
Notifications
You must be signed in to change notification settings - Fork 311
Add a test to demonstrate connection logical deadlock under high concurrency #852
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…equests than max_concurrent_streams
Thanks for providing a test case! What you describe in the issue sounds plausible, but I notice in this that flow control isn't touched, so neither side will give any more connection window space at all, so it will by design definitely not be able to make further progress. |
tests/h2-tests/tests/deadlock.rs
Outdated
); | ||
} | ||
|
||
thread::sleep(CHECK_FOR_PROGRESS_INTERVAL); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You'd also want to use something like tokio::time::sleep(CHECK_FOR_PROGRESS_INTERVAL).await
to not block any of the other tasks on this thread.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch - updated.
It is not clear what you mean by this. Why would flow control need to be touched? The connection has a non-zero window (before it gets allocated to pending_open requests that could not possibly use it, based on the theory above), so all the requests should be transmitted through that window. Am I misunderstanding something? |
Test to accompany bug report #853.