std: Add cfg(test) to UnsafeArc assertions
This is a ubiquitous type in concurrent code, and the assertions are causing significant code bloat for simple operations such as reading the pointer (injecting a failure point, etc). I am testing executable sizes with no I/O implementations (everything stubbed out to return nothing), and this took the size of a libnative executable from 328K to 207K (37% reduction in size), so I think that this is one assertion that's well worth configuring off for now.
This commit is contained in:
parent
f01a9a8d02
commit
d5aa795aa5
@ -80,7 +80,8 @@ impl<T: Send> UnsafeArc<T> {
|
||||
#[inline]
|
||||
pub fn get(&self) -> *mut T {
|
||||
unsafe {
|
||||
assert!((*self.data).count.load(Relaxed) > 0);
|
||||
// FIXME(#12049): this needs some sort of debug assertion
|
||||
if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); }
|
||||
return &mut (*self.data).data as *mut T;
|
||||
}
|
||||
}
|
||||
@ -90,7 +91,8 @@ impl<T: Send> UnsafeArc<T> {
|
||||
#[inline]
|
||||
pub fn get_immut(&self) -> *T {
|
||||
unsafe {
|
||||
assert!((*self.data).count.load(Relaxed) > 0);
|
||||
// FIXME(#12049): this needs some sort of debug assertion
|
||||
if cfg!(test) { assert!((*self.data).count.load(Relaxed) > 0); }
|
||||
return &(*self.data).data as *T;
|
||||
}
|
||||
}
|
||||
@ -109,7 +111,8 @@ impl<T: Send> Clone for UnsafeArc<T> {
|
||||
unsafe {
|
||||
// This barrier might be unnecessary, but I'm not sure...
|
||||
let old_count = (*self.data).count.fetch_add(1, Acquire);
|
||||
assert!(old_count >= 1);
|
||||
// FIXME(#12049): this needs some sort of debug assertion
|
||||
if cfg!(test) { assert!(old_count >= 1); }
|
||||
return UnsafeArc { data: self.data };
|
||||
}
|
||||
}
|
||||
@ -127,7 +130,8 @@ impl<T> Drop for UnsafeArc<T>{
|
||||
// Must be acquire+release, not just release, to make sure this
|
||||
// doesn't get reordered to after the unwrapper pointer load.
|
||||
let old_count = (*self.data).count.fetch_sub(1, SeqCst);
|
||||
assert!(old_count >= 1);
|
||||
// FIXME(#12049): this needs some sort of debug assertion
|
||||
if cfg!(test) { assert!(old_count >= 1); }
|
||||
if old_count == 1 {
|
||||
let _: ~ArcData<T> = cast::transmute(self.data);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user