Remove check on strong_count < 1. #32
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.
Previously, we tried to check against the possibility that C code calls
rustls_client_config_free twice. We did this by doing
Arc::from_raw
,then checking if strong_count is < 1.
However, this was undefined behavior: deferencing a dangling pointer.
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
If strong_count went to zero on some previous call,
Arc
would havedropped its contents. That means the pointed-to memory is no longer
valid to access, and its contents are undefined. So we might see
strong_count of 1,000,000, or -1,000,000, or any other value; or monkeys
could fly out of our noses.
The C caller can still invoke undefined behavior by calling
rustls_client_config_free
twice, but the previous change tried todetect undefined behavior by invoking undefined behavior, which doesn't
work.