diff options
| author | Eric Holk <eric.holk@gmail.com> | 2012-06-15 22:14:02 -0400 |
|---|---|---|
| committer | Eric Holk <eric.holk@gmail.com> | 2012-06-19 10:31:12 -0700 |
| commit | 2a128fa205f36074c8fbf4bc490e1ad0f76f38f6 (patch) | |
| tree | feaf228cdf556b33ea384c19621dac1dd3d8bbe2 /src | |
| parent | be664ddd2917e13c1c5f05a49476f8b67be85140 (diff) | |
| download | rust-2a128fa205f36074c8fbf4bc490e1ad0f76f38f6.tar.gz rust-2a128fa205f36074c8fbf4bc490e1ad0f76f38f6.zip | |
Reference fixes.
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/arc.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/libcore/arc.rs b/src/libcore/arc.rs index 312606be906..eb11c8f1c54 100644 --- a/src/libcore/arc.rs +++ b/src/libcore/arc.rs @@ -102,11 +102,14 @@ impl methods<T> for exclusive<T> { fn with<U>(f: fn(sys::condition, x: &T) -> U) -> U { unsafe { let ptr: ~arc_data<ex_data<T>> = unsafe::reinterpret_cast(*self); - let rec: &ex_data<T> = &(*ptr).data; + let r = { + let rec: &ex_data<T> = &(*ptr).data; + rec.lock.lock_cond() {|c| + f(c, &rec.data) + } + }; unsafe::forget(ptr); - rec.lock.lock_cond() {|c| - f(c, &rec.data) - } + r } } } |
