From 34c44ffb6bea93c844f1da1f529fda18e86df973 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 16 Sep 2023 13:26:45 -0600 Subject: [PATCH] Propagate thread creation error in flock --- src/flock.rs | 19 ++++++++++--------- src/run.rs | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/flock.rs b/src/flock.rs index bd6a0f9..9cb3fba 100644 --- a/src/flock.rs +++ b/src/flock.rs @@ -1,3 +1,4 @@ +use crate::error::Result; use once_cell::sync::OnceCell; use std::fs::{self, File, OpenOptions}; use std::io; @@ -32,11 +33,11 @@ enum FileLock { } impl Lock { - pub fn acquire(path: impl AsRef) -> Self { - Lock { + pub fn acquire(path: impl AsRef) -> Result { + Ok(Lock { intraprocess_guard: Guard::acquire(), - lockfile: FileLock::acquire(path), - } + lockfile: FileLock::acquire(path)?, + }) } } @@ -51,18 +52,18 @@ impl Guard { } impl FileLock { - fn acquire(path: impl AsRef) -> Self { + fn acquire(path: impl AsRef) -> Result { let path = path.as_ref().to_owned(); let lockfile = match create(&path) { - None => return FileLock::NotLocked, + None => return Ok(FileLock::NotLocked), Some(lockfile) => lockfile, }; let done = Arc::new(AtomicBool::new(false)); - thread::spawn({ + thread::Builder::new().spawn({ let done = Arc::clone(&done); move || poll(lockfile, done) - }); - FileLock::Locked { path, done } + })?; + Ok(FileLock::Locked { path, done }) } } diff --git a/src/run.rs b/src/run.rs index e2686a5..f26d6a5 100644 --- a/src/run.rs +++ b/src/run.rs @@ -52,7 +52,7 @@ impl Runner { let (project, _lock) = (|| { let mut project = self.prepare(&tests)?; - let lock = Lock::acquire(path!(project.dir / ".lock")); + let lock = Lock::acquire(path!(project.dir / ".lock"))?; self.write(&mut project)?; Ok((project, lock)) })()