diff options
| author | bors <bors@rust-lang.org> | 2017-05-03 23:05:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-05-03 23:05:07 +0000 |
| commit | b16c7a235fa0f57fed6b7ec13ffd3cff1bcdd9ad (patch) | |
| tree | e8fa6a2c0127f43d06a1e4fe7788c3cce852fab0 /src/liballoc | |
| parent | 2d4ed8e0cbe2c5f3763273a5d8f6b15119473ba7 (diff) | |
| parent | e20b2823303ddb145ce58286abeb67d4c017ccf0 (diff) | |
| download | rust-b16c7a235fa0f57fed6b7ec13ffd3cff1bcdd9ad.tar.gz rust-b16c7a235fa0f57fed6b7ec13ffd3cff1bcdd9ad.zip | |
Auto merge of #41735 - frewsxcv:rollup, r=frewsxcv
Rollup of 6 pull requests - Successful merges: #41543, #41600, #41715, #41720, #41721, #41730 - Failed merges:
Diffstat (limited to 'src/liballoc')
| -rw-r--r-- | src/liballoc/arc.rs | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs index 182a107e3f7..1df79074d3f 100644 --- a/src/liballoc/arc.rs +++ b/src/liballoc/arc.rs @@ -767,7 +767,18 @@ unsafe impl<#[may_dangle] T: ?Sized> Drop for Arc<T> { // > through this reference must obviously happened before), and an // > "acquire" operation before deleting the object. // + // In particular, while the contents of an Arc are usually immutable, it's + // possible to have interior writes to something like a Mutex<T>. Since a + // Mutex is not acquired when it is deleted, we can't rely on its + // synchronization logic to make writes in thread A visible to a destructor + // running in thread B. + // + // Also note that the Acquire fence here could probably be replaced with an + // Acquire load, which could improve performance in highly-contended + // situations. See [2]. + // // [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html) + // [2]: (https://github.com/rust-lang/rust/pull/41714) atomic::fence(Acquire); unsafe { |
