From 4fecc503ee6f4fcd97d0d9421bfed279dd67ac6c Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 9 Jun 2014 20:57:55 -0700 Subject: [PATCH] rustrt: Fix invalid reads caught by valgrind This is another case of #13246. The RAII lock wasn't being destroyed until after the allocation was free'd due to destructor scheduling. Closes #14784 --- src/librustrt/at_exit_imp.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librustrt/at_exit_imp.rs b/src/librustrt/at_exit_imp.rs index d38d06950bf..2f1c38c5686 100644 --- a/src/librustrt/at_exit_imp.rs +++ b/src/librustrt/at_exit_imp.rs @@ -54,7 +54,8 @@ pub fn run() { rtassert!(queue != 0); let queue: Box = mem::transmute(queue); - mem::replace(&mut *queue.lock(), Vec::new()) + let v = mem::replace(&mut *queue.lock(), Vec::new()); + v }; for to_run in cur.move_iter() {