1+ use crate :: error:: Result ;
12use once_cell:: sync:: OnceCell ;
23use std:: fs:: { self , File , OpenOptions } ;
34use std:: io;
@@ -32,11 +33,11 @@ enum FileLock {
3233}
3334
3435impl Lock {
35- pub fn acquire ( path : impl AsRef < Path > ) -> Self {
36- Lock {
36+ pub fn acquire ( path : impl AsRef < Path > ) -> Result < Self > {
37+ Ok ( Lock {
3738 intraprocess_guard : Guard :: acquire ( ) ,
38- lockfile : FileLock :: acquire ( path) ,
39- }
39+ lockfile : FileLock :: acquire ( path) ? ,
40+ } )
4041 }
4142}
4243
@@ -51,18 +52,18 @@ impl Guard {
5152}
5253
5354impl FileLock {
54- fn acquire ( path : impl AsRef < Path > ) -> Self {
55+ fn acquire ( path : impl AsRef < Path > ) -> Result < Self > {
5556 let path = path. as_ref ( ) . to_owned ( ) ;
5657 let lockfile = match create ( & path) {
57- None => return FileLock :: NotLocked ,
58+ None => return Ok ( FileLock :: NotLocked ) ,
5859 Some ( lockfile) => lockfile,
5960 } ;
6061 let done = Arc :: new ( AtomicBool :: new ( false ) ) ;
61- thread:: spawn ( {
62+ thread:: Builder :: new ( ) . spawn ( {
6263 let done = Arc :: clone ( & done) ;
6364 move || poll ( lockfile, done)
64- } ) ;
65- FileLock :: Locked { path, done }
65+ } ) ? ;
66+ Ok ( FileLock :: Locked { path, done } )
6667 }
6768}
6869
0 commit comments