fix: move debug_assert check #275
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.
Fix needed after #268
The fix is only for debug_assert correctness. There's no functional effect.
i.e. version 0.8.6 might cause debug tests to fail, but it isn't a (functionally) breaking change.
Explanation
Moving the lock to be per-bucket changed the
DYNAMIC_SET
's API so that it doesn't need to be locked (i.e.DYANMIC_SET
is not wrapped with aMutex
).The
Atom
'sfn drop
changed fromto
(the
lock()
is gone)Now when we enter
DYNAMIC_SET.remove()
, there's no longer a lock guarantee.Until we lock the bucket, another thread could be in the middle of performing a
DYNAMIC_SET.insert()
for the same string.Therefore, the
debug_assert!(value.ref_count.load(SeqCst) == 0)
is premature - it needs to occur after we take the lock for the bucket.Caught at swc-project/swc#6980 in a failed test.