mirror of https://github.com/hyperledger/besu
Fix potential stall in world state download. (#922)
There's an issue with the world state downloader where the download process could stall. The sequence goes like: 1. Inside requestDataFromPeer thread A takes out the sendingRequests lock 2. Thread A checks shouldRequestNodeData which returns true 3. Thread A sends a request for data 4. Thread A checks shouldRequestNodeData which returns false so it exits the while loop 5. Thread B receives the response to the (only) outstanding request 6. Thread B enters shouldRequestNodeData but fails to get the sendingRequests lock so exits the method 7. Thread A releases the sendingRequests lock and exits the methods There are now no threads checking if they should send new requests and no outstanding requests to trigger a check in the future so the download is stuck and will never make anymore progress. The fix is to switch the order of taking out the sendingRequests lock and checking shouldRequestNodeData so we release the sendingRequests lock before we go back round the loop to check shouldRequestNodeData. Signed-off-by: Adrian Sutton <adrian.sutton@consensys.net>pull/2/head
parent
4404cac632
commit
c4a0d69af9
Loading…
Reference in new issue