Fix an off-by-one in managed::refcount

This fixes a bug I accidentally introduced in #9922
This commit is contained in:
Alex Crichton 2013-10-18 09:22:03 -07:00
parent a1848bc755
commit 6a11e17b6b

View File

@ -21,7 +21,7 @@ pub static RC_IMMORTAL : uint = 0x77777777;
#[inline] #[inline]
pub fn refcount<T>(t: @T) -> uint { pub fn refcount<T>(t: @T) -> uint {
use unstable::raw::Repr; use unstable::raw::Repr;
unsafe { (*t.repr()).ref_count } unsafe { (*t.repr()).ref_count - 1 }
} }
/// Determine if two shared boxes point to the same object /// Determine if two shared boxes point to the same object
@ -110,3 +110,14 @@ fn test() {
assert!((!ptr_eq::<int>(x, y))); assert!((!ptr_eq::<int>(x, y)));
assert!((!ptr_eq::<int>(y, x))); assert!((!ptr_eq::<int>(y, x)));
} }
#[test]
fn refcount_test() {
use clone::Clone;
let x = @3;
assert_eq!(refcount(x), 1);
let y = x.clone();
assert_eq!(refcount(x), 2);
assert_eq!(refcount(y), 2);
}