@@ -6,7 +6,7 @@ use std::{
66 io:: Write ,
77 path:: { Path , PathBuf } ,
88 process:: { Command , Stdio } ,
9- sync:: Mutex ,
9+ sync:: RwLock ,
1010} ;
1111
1212use crate :: {
@@ -40,7 +40,7 @@ pub struct Tool {
4040impl Tool {
4141 pub ( crate ) fn new (
4242 path : PathBuf ,
43- cached_compiler_family : & Mutex < HashMap < Box < Path > , ToolFamily > > ,
43+ cached_compiler_family : & RwLock < HashMap < Box < Path > , ToolFamily > > ,
4444 cargo_output : & CargoOutput ,
4545 out_dir : Option < & Path > ,
4646 ) -> Self {
@@ -57,7 +57,7 @@ impl Tool {
5757 pub ( crate ) fn with_clang_driver (
5858 path : PathBuf ,
5959 clang_driver : Option < & str > ,
60- cached_compiler_family : & Mutex < HashMap < Box < Path > , ToolFamily > > ,
60+ cached_compiler_family : & RwLock < HashMap < Box < Path > , ToolFamily > > ,
6161 cargo_output : & CargoOutput ,
6262 out_dir : Option < & Path > ,
6363 ) -> Self {
@@ -90,7 +90,7 @@ impl Tool {
9090 path : PathBuf ,
9191 clang_driver : Option < & str > ,
9292 cuda : bool ,
93- cached_compiler_family : & Mutex < HashMap < Box < Path > , ToolFamily > > ,
93+ cached_compiler_family : & RwLock < HashMap < Box < Path > , ToolFamily > > ,
9494 cargo_output : & CargoOutput ,
9595 out_dir : Option < & Path > ,
9696 ) -> Self {
@@ -186,13 +186,13 @@ impl Tool {
186186 }
187187 }
188188 let detect_family = |path : & Path | -> Result < ToolFamily , Error > {
189- if let Some ( family) = cached_compiler_family. lock ( ) . unwrap ( ) . get ( path) {
189+ if let Some ( family) = cached_compiler_family. read ( ) . unwrap ( ) . get ( path) {
190190 return Ok ( * family) ;
191191 }
192192
193193 let family = detect_family_inner ( path, cargo_output, out_dir) ?;
194194 cached_compiler_family
195- . lock ( )
195+ . write ( )
196196 . unwrap ( )
197197 . insert ( path. into ( ) , family) ;
198198 Ok ( family)
0 commit comments