fix: don't hang when sharepolicies return immediately #74
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem: when using a SharePolicy (rather than doing some asynchronous work) it was possible for the repo to hang. The symptom of this would be that a repo would never respond to sync messages for a document when a SharePolicy returned a positive response for the document.
Why was this happening? When the repo first receives a sync message for a (document, peer) combination it checks whether the SharePolicy allows synchronization with the peer in question. To do this the repo creates a new future (correspoinding to SharePolicy::should_sync) and then puts it in a list of share decisions to poll. The share decisions are then polled on the next run through the event loop. If the repo is in a very quiet loop then no new event occurs to trigger the first poll of the future.
Solution: at the end of the repo event loop check if there are any share decisions to poll. If there are, then run the loop again.