diff options
| author | bors <bors@rust-lang.org> | 2014-05-24 12:51:24 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-05-24 12:51:24 -0700 |
| commit | 43f942f88656f6b6cb2ff143e496a8875ea157ac (patch) | |
| tree | 850bbfc22c696e6175c65de0665ad55927091f39 /src/libstd | |
| parent | b546fff784f022bb35adbd8c13f6d1d8f6846363 (diff) | |
| parent | 9a8379deb296b7a8b543fca635c52307d13f6daf (diff) | |
| download | rust-43f942f88656f6b6cb2ff143e496a8875ea157ac.tar.gz rust-43f942f88656f6b6cb2ff143e496a8875ea157ac.zip | |
auto merge of #14378 : huonw/rust/deque-adjustments, r=alexcrichton
Might as well remove the duplication/`forget` call.
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/sync/deque.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/libstd/sync/deque.rs b/src/libstd/sync/deque.rs index a3fdc4d3eaf..46d6129ded8 100644 --- a/src/libstd/sync/deque.rs +++ b/src/libstd/sync/deque.rs @@ -54,7 +54,7 @@ use clone::Clone; use iter::{range, Iterator}; use kinds::Send; use kinds::marker; -use mem::{forget, min_align_of, size_of, transmute}; +use mem::{forget, min_align_of, size_of, transmute, overwrite}; use ops::Drop; use option::{Option, Some, None}; use owned::Box; @@ -371,20 +371,20 @@ impl<T: Send> Buffer<T> { // Apparently LLVM cannot optimize (foo % (1 << bar)) into this implicitly fn mask(&self) -> int { (1 << self.log_size) - 1 } + unsafe fn elem(&self, i: int) -> *T { self.storage.offset(i & self.mask()) } + // This does not protect against loading duplicate values of the same cell, // nor does this clear out the contents contained within. Hence, this is a // very unsafe method which the caller needs to treat specially in case a // race is lost. unsafe fn get(&self, i: int) -> T { - ptr::read(self.storage.offset(i & self.mask())) + ptr::read(self.elem(i)) } // Unsafe because this unsafely overwrites possibly uninitialized or // initialized data. unsafe fn put(&self, i: int, t: T) { - let ptr = self.storage.offset(i & self.mask()); - ptr::copy_nonoverlapping_memory(ptr as *mut T, &t as *T, 1); - forget(t); + overwrite(self.elem(i) as *mut T, t); } // Again, unsafe because this has incredibly dubious ownership violations. |
