From d0325579ad2ac408a067cd0f7637e8fef82823ab Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 16 Mar 2020 14:45:16 -0700 Subject: [PATCH] Use Arc to avoid use-after-free in threaded cancellation unit test Fixes #579 --- cli/src/tests/parser_test.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cli/src/tests/parser_test.rs b/cli/src/tests/parser_test.rs index 0384bce8..392d1a9d 100644 --- a/cli/src/tests/parser_test.rs +++ b/cli/src/tests/parser_test.rs @@ -450,7 +450,7 @@ fn test_parsing_on_multiple_threads() { #[test] fn test_parsing_cancelled_by_another_thread() { - let cancellation_flag = Box::new(AtomicUsize::new(0)); + let cancellation_flag = std::sync::Arc::new(AtomicUsize::new(0)); let mut parser = Parser::new(); parser.set_language(get_language("javascript")).unwrap(); @@ -471,9 +471,10 @@ fn test_parsing_cancelled_by_another_thread() { ); assert!(tree.is_some()); + let flag = cancellation_flag.clone(); let cancel_thread = thread::spawn(move || { thread::sleep(time::Duration::from_millis(100)); - cancellation_flag.store(1, Ordering::SeqCst); + flag.store(1, Ordering::SeqCst); }); // Infinite input