Closed
Description
fn main() {
do arc::exclusive(1).with |_c, one| {
assert *one == 2;
}
}
This segfaults and/or glibc-detected-double-free. Valgrind shows the badness shows up considerably beforehand.
rust: task failed at 'Assertion *one == 2 failed', arc3.rs:3
==13471== Thread 3:
==13471== Invalid read of size 8
==13471== at 0x5595A1B: rust_atomic_decrement
==13471== by 0x4E7A275: arc::rustrt::rust_atomic_decrement::_8b5c517b827e1d59::_03
==13471== by 0x402B38: arc::dtor63::_d8dccf9b65e77125::_00
==13471== Address 0x6ae2240 is 32 bytes inside a block of size 64 free'd
==13491== at 0x4C2A82E: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13471== by 0x55AE09C: ??? (in librustrt.so)
==13471== by 0x6AE30CF: ???
==13471== by 0x55AE09C: ??? (in librustrt.so)
Incidentally, anybody know how to get better when-freed stack traces in valgrind?