From 3b6f0ec42c52300bcd73ffe4dff1abc0468bc36d Mon Sep 17 00:00:00 2001 From: Chris Denton Date: Sun, 1 Sep 2024 17:40:53 +0000 Subject: [PATCH] Enable remove-dir-all-race test on Windows --- tests/run-make/remove-dir-all-race/rmake.rs | 24 ++++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/tests/run-make/remove-dir-all-race/rmake.rs b/tests/run-make/remove-dir-all-race/rmake.rs index 03c94b76127d5..1bece7c60689f 100644 --- a/tests/run-make/remove-dir-all-race/rmake.rs +++ b/tests/run-make/remove-dir-all-race/rmake.rs @@ -1,19 +1,11 @@ -//@ ignore-windows - // This test attempts to make sure that running `remove_dir_all` // doesn't result in a NotFound error one of the files it // is deleting is deleted concurrently. -// -// The windows implementation for `remove_dir_all` is significantly -// more complicated, and has not yet been brought up to par with -// the implementation on other platforms, so this test is marked as -// `ignore-windows` until someone more expirenced with windows can -// sort that out. use std::fs::remove_dir_all; use std::path::Path; -use std::thread; use std::time::Duration; +use std::{io, thread}; use run_make_support::rfs::{create_dir, write}; use run_make_support::run_in_tmpdir; @@ -29,15 +21,21 @@ fn main() { thread::scope(|scope| { let t1 = scope.spawn(|| { thread::sleep(Duration::from_nanos(i)); - remove_dir_all("outer").unwrap(); + if let Err(e) = remove_dir_all("outer") { + if e.kind() == io::ErrorKind::NotFound { + panic!("file not found"); + } + } }); let race_happened_ref = &race_happened; let t2 = scope.spawn(|| { let r1 = remove_dir_all("outer/inner"); let r2 = remove_dir_all("outer/inner.txt"); - if r1.is_ok() && r2.is_err() { - race_happened = true; + if let Err(e) = r2 { + if r1.is_ok() && e.kind() == io::ErrorKind::NotFound { + race_happened = true; + } } }); }); @@ -49,7 +47,7 @@ fn main() { let Err(err) = remove_dir_all("outer") else { panic!("removing nonexistant dir did not result in an error"); }; - assert_eq!(err.kind(), std::io::ErrorKind::NotFound); + assert_eq!(err.kind(), io::ErrorKind::NotFound); } }); if !race_happened {