Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Guarantee exclusive use of
HttpClientConnection
. (#273)
When calling the HTTP `send` / `open` functions, `acquireConnection` is called to obtain a connection in state `Ready`. In the next code block, the connection state is advanced to `RequestHeadersSending`. However, returning from chronos `async` procs yields control, similar to `await`. This means that a connection may be added to the pool in `Ready` state, and then a different `acquireConnection` call may obtain a second ref. Introducing a new `Acquired` state ensures consistency in this case. No tests added due to this being scheduler dependent; ran manual tests by adding a `doAssert item.state != HttpClientConnectionState.Acquired` between `if not(isNil(conn)):` and `return conn`. Eventually, the assert got hit after several hours of repeated tests, confirming the edge case to be solved by applying this fix. Not sure if it is by design that returning from an `async` proc yields. Even if it's not, this should solve current HTTP issues in nimbus-eth2.
- Loading branch information