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

Fix panic safety issue in drop #15

merged 2 commits into from Aug 21, 2015

Conversation

@bluss
Copy link
Contributor

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 bluss force-pushed the bluss:drop-nodrop branch from ecf9078 to dc1de27 Aug 20, 2015
@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 #14
@bluss bluss force-pushed the bluss:drop-nodrop branch from dc1de27 to fbaf095 Aug 21, 2015
@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

SimonSapin commented Aug 21, 2015

Yes, I prefer this second version. Thanks!

@SimonSapin
Copy link
Member

SimonSapin commented Aug 21, 2015

@bors-servo
Copy link
Contributor

bors-servo commented Aug 21, 2015

📌 Commit fbaf095 has been approved by SimonSapin

@bors-servo
Copy link
Contributor

bors-servo commented Aug 21, 2015

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

bors-servo commented Aug 21, 2015

☀️ Test successful - travis

@bors-servo bors-servo merged commit fbaf095 into servo:master Aug 21, 2015
2 checks passed
2 checks passed
continuous-integration/travis-ci/pr The Travis CI build passed
Details
homu Test successful
Details
@bluss bluss deleted the bluss:drop-nodrop branch Aug 21, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked issues

Successfully merging this pull request may close these issues.

None yet

3 participants
You can’t perform that action at this time.