feat: use non atomic tracker for snapshot reverts #6451
Merged
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.
closes probably #6355
possibly related #6450
Some background:
due to ds-test legacy behaviour failures are stored in a state variable.
Prior to #4974
because we were using a Cow of the
Backend
so regular fuzz runs don't need to clone it per fuzz call, however as #4974 highlighted this is unsound for snapshots because we lose state that contains the the state variable that tracks errors#4974 tried to fix this by persisting snapshot failures in an AtomicBool. But this is also unsound because this is susceptible to race conditions because this bool is now shared by all tests, even if we clone the Backend (Arc).
The fix is to use a simple boolean again and instead add the
has_snapshot_failure
to the RawCallResult that we then can also check when checking for failures.That being said, the Executor + ContractRunner, especially the Fuzz variants desperately need a cleanup.