Fix a main-thread assertion in the QuorumIntersectionChecker #4262
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.
Change #4240 introduced a new call to
assertThreadIsMain();
in the QI constructor. This is correct for the top-level QI checker, but we then run that QI checker on a background thread and, if it does enjoy intersection, we callgetIntersectionCriticalGroups
which then constructs a pile of QI checkers on the background thread.The assertion only exists to guard access to the global PRNG to get a seed (the seed used here is a very light requirement that just helps perturb the algorithm's set-splitting path). So a simple solution is to not access the global PRNG in the constructor, but to access it in the scope outside and pass-in a seed. It's harmless to use the same seed in all the sub-checkers constructed in
getIntersectionCriticalGroups
, so I do that here.cc @SirTyson