@@ -60,34 +60,59 @@ impl CacheImpl {
6060 }
6161
6262 fn get_cache_directory ( & self ) -> Option < PathBuf > {
63- self . cache_dir . lock ( ) . unwrap ( ) . clone ( )
63+ self . cache_dir
64+ . lock ( )
65+ . expect ( "cache_dir mutex poisoned" )
66+ . clone ( )
6467 }
6568
6669 /// Once a cache directory has been set, you cannot change it.
6770 /// No point supporting such a scenario.
6871 fn set_cache_directory ( & self , cache_dir : PathBuf ) {
69- if let Some ( cache_dir) = self . cache_dir . lock ( ) . unwrap ( ) . clone ( ) {
72+ if let Some ( cache_dir) = self
73+ . cache_dir
74+ . lock ( )
75+ . expect ( "cache_dir mutex poisoned" )
76+ . clone ( )
77+ {
7078 warn ! (
7179 "Cache directory has already been set to {:?}. Cannot change it now." ,
7280 cache_dir
7381 ) ;
7482 return ;
7583 }
7684 trace ! ( "Setting cache directory to {:?}" , cache_dir) ;
77- self . cache_dir . lock ( ) . unwrap ( ) . replace ( cache_dir) ;
85+ self . cache_dir
86+ . lock ( )
87+ . expect ( "cache_dir mutex poisoned" )
88+ . replace ( cache_dir) ;
7889 }
7990 fn clear ( & self ) -> io:: Result < ( ) > {
8091 trace ! ( "Clearing cache" ) ;
81- self . locks . lock ( ) . unwrap ( ) . clear ( ) ;
82- if let Some ( cache_directory) = self . cache_dir . lock ( ) . unwrap ( ) . clone ( ) {
92+ self . locks . lock ( ) . expect ( "locks mutex poisoned" ) . clear ( ) ;
93+ if let Some ( cache_directory) = self
94+ . cache_dir
95+ . lock ( )
96+ . expect ( "cache_dir mutex poisoned" )
97+ . clone ( )
98+ {
8399 std:: fs:: remove_dir_all ( cache_directory)
84100 } else {
85101 Ok ( ( ) )
86102 }
87103 }
88104 fn create_cache ( & self , executable : PathBuf ) -> LockableCacheEntry {
89- let cache_directory = self . cache_dir . lock ( ) . unwrap ( ) . clone ( ) ;
90- match self . locks . lock ( ) . unwrap ( ) . entry ( executable. clone ( ) ) {
105+ let cache_directory = self
106+ . cache_dir
107+ . lock ( )
108+ . expect ( "cache_dir mutex poisoned" )
109+ . clone ( ) ;
110+ match self
111+ . locks
112+ . lock ( )
113+ . expect ( "locks mutex poisoned" )
114+ . entry ( executable. clone ( ) )
115+ {
91116 Entry :: Occupied ( lock) => lock. get ( ) . clone ( ) ,
92117 Entry :: Vacant ( lock) => {
93118 let cache = Box :: new ( CacheEntryImpl :: create ( cache_directory. clone ( ) , executable) )
@@ -122,7 +147,12 @@ impl CacheEntryImpl {
122147 }
123148 pub fn verify_in_memory_cache ( & self ) {
124149 // Check if any of the exes have changed since we last cached this.
125- for symlink_info in self . symlinks . lock ( ) . unwrap ( ) . iter ( ) {
150+ for symlink_info in self
151+ . symlinks
152+ . lock ( )
153+ . expect ( "symlinks mutex poisoned" )
154+ . iter ( )
155+ {
126156 if let Ok ( metadata) = symlink_info. 0 . metadata ( ) {
127157 let mtime_changed = metadata. modified ( ) . ok ( ) != Some ( symlink_info. 1 ) ;
128158 // Only check ctime if we have it stored (may be None on Linux)
@@ -139,7 +169,10 @@ impl CacheEntryImpl {
139169 metadata. modified( ) . ok( ) ,
140170 metadata. created( ) . ok( )
141171 ) ;
142- self . envoronment . lock ( ) . unwrap ( ) . take ( ) ;
172+ self . envoronment
173+ . lock ( )
174+ . expect ( "envoronment mutex poisoned" )
175+ . take ( ) ;
143176 if let Some ( cache_directory) = & self . cache_directory {
144177 delete_cache_file ( cache_directory, & self . executable ) ;
145178 }
@@ -155,15 +188,23 @@ impl CacheEntry for CacheEntryImpl {
155188
156189 // New scope to drop lock immediately after we have the value.
157190 {
158- if let Some ( env) = self . envoronment . lock ( ) . unwrap ( ) . clone ( ) {
191+ if let Some ( env) = self
192+ . envoronment
193+ . lock ( )
194+ . expect ( "envoronment mutex poisoned" )
195+ . clone ( )
196+ {
159197 return Some ( env) ;
160198 }
161199 }
162200
163201 if let Some ( ref cache_directory) = self . cache_directory {
164202 let ( env, mut symlinks) = get_cache_from_file ( cache_directory, & self . executable ) ?;
165- self . envoronment . lock ( ) . unwrap ( ) . replace ( env. clone ( ) ) ;
166- let mut locked_symlinks = self . symlinks . lock ( ) . unwrap ( ) ;
203+ self . envoronment
204+ . lock ( )
205+ . expect ( "envoronment mutex poisoned" )
206+ . replace ( env. clone ( ) ) ;
207+ let mut locked_symlinks = self . symlinks . lock ( ) . expect ( "symlinks mutex poisoned" ) ;
167208 locked_symlinks. clear ( ) ;
168209 locked_symlinks. append ( & mut symlinks) ;
169210 Some ( env)
@@ -190,13 +231,13 @@ impl CacheEntry for CacheEntryImpl {
190231 symlinks. dedup ( ) ;
191232
192233 {
193- let mut locked_symlinks = self . symlinks . lock ( ) . unwrap ( ) ;
234+ let mut locked_symlinks = self . symlinks . lock ( ) . expect ( "symlinks mutex poisoned" ) ;
194235 locked_symlinks. clear ( ) ;
195236 locked_symlinks. append ( & mut symlinks. clone ( ) ) ;
196237 }
197238 self . envoronment
198239 . lock ( )
199- . unwrap ( )
240+ . expect ( "envoronment mutex poisoned" )
200241 . replace ( environment. clone ( ) ) ;
201242
202243 trace ! ( "Caching interpreter info for {:?}" , self . executable) ;
@@ -213,7 +254,7 @@ impl CacheEntry for CacheEntryImpl {
213254 let known_symlinks: HashSet < PathBuf > = self
214255 . symlinks
215256 . lock ( )
216- . unwrap ( )
257+ . expect ( "symlinks mutex poisoned" )
217258 . clone ( )
218259 . iter ( )
219260 . map ( |x| x. 0 . clone ( ) )
0 commit comments