Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix panic safety issue in drop #15

Merged
merged 2 commits into from
Aug 21, 2015
Merged

Conversation

bluss
Copy link
Contributor

@bluss bluss commented Aug 20, 2015

The summary is: SmallVec::drop first attempts to drop every element,
then it inhibits the drop of the inner array. The panic safety issue is
that a panic during drop of an element means the inhibition is never
reached, so the inner data can be dropped again.

If Drop is split betweeen SmallVec and SmallVecData, this issue is
avoided because the SmallVecData drop will be called even in the panic
case.

This solution incurs the overhead of an additional drop flag on
SmallVecData.

Fixes #14

Review on Reviewable

@bluss
Copy link
Contributor Author

bluss commented Aug 20, 2015

This may not be the solution you want. But it should help anyway, to illustrate the problem(?). Welcome to use the test if not the fix.

The summary is: SmallVec::drop first attempts to drop every element,
then it inhibits the drop of the inner array. The panic safety issue is
that a panic during drop of an element means the inhibition is never
reached, so the inner data can be dropped again.

If Drop is split betweeen SmallVec and SmallVecData, this issue is
avoided because the SmallVecData drop will be called even in the panic
case.

This solution incurs the overhead of an additional drop flag on
SmallVecData.

Fixes servo#14
@bluss bluss changed the title Fix panic safety issue in drop by using NoDrop Fix panic safety issue in drop Aug 21, 2015
@bluss
Copy link
Contributor Author

bluss commented Aug 21, 2015

Updated fix to not use NoDrop -- the inner SmallVecData serves the same purpose.

@SimonSapin
Copy link
Member

Yes, I prefer this second version. Thanks!

@SimonSapin
Copy link
Member

@bors-servo r+

@bors-servo
Copy link
Contributor

📌 Commit fbaf095 has been approved by SimonSapin

@bors-servo
Copy link
Contributor

⌛ Testing commit fbaf095 with merge b5c3e4f...

bors-servo pushed a commit that referenced this pull request Aug 21, 2015
Fix panic safety issue in drop

The summary is: SmallVec::drop first attempts to drop every element,
then it inhibits the drop of the inner array. The panic safety issue is
that a panic during drop of an element means the inhibition is never
reached, so the inner data can be dropped again.

If Drop is split betweeen SmallVec and SmallVecData, this issue is
avoided because the SmallVecData drop will be called even in the panic
case.

This solution incurs the overhead of an additional drop flag on
SmallVecData.

Fixes #14
@bors-servo
Copy link
Contributor

☀️ Test successful - travis

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants