@@ -57,9 +57,12 @@ impl<T: Send + Sync> ResourcePool<T> {
57
57
. map_err ( |_| ResourcePoolError :: PoisonedLock ( ) )
58
58
. with_context ( || "Resource pool 'acquire_resource' failed locking Mutex" ) ?;
59
59
while resources. is_empty ( ) {
60
- let ( resources_locked, timeout) =
61
- self . not_empty . wait_timeout ( resources, timeout) . unwrap ( ) ;
62
- if timeout. timed_out ( ) {
60
+ let ( resources_locked, wait_result) = self
61
+ . not_empty
62
+ . wait_timeout ( resources, timeout)
63
+ . map_err ( |_| ResourcePoolError :: PoisonedLock ( ) )
64
+ . with_context ( || "Resource pool 'acquire_resource' failed waiting for resource" ) ?;
65
+ if wait_result. timed_out ( ) {
63
66
return Err ( ResourcePoolError :: AcquireTimeout ( ) )
64
67
. with_context ( || "Resource pool 'acquire_resource' has timed out" ) ;
65
68
}
@@ -214,7 +217,7 @@ mod tests {
214
217
215
218
let mut resources_items = vec ! [ ] ;
216
219
for _ in 0 ..pool_size {
217
- let resource_item = pool. acquire_resource ( Duration :: from_millis ( 1000 ) ) . unwrap ( ) ;
220
+ let resource_item = pool. acquire_resource ( Duration :: from_millis ( 100 ) ) . unwrap ( ) ;
218
221
resources_items. push ( resource_item) ;
219
222
}
220
223
let resources_result = resources_items
@@ -234,7 +237,7 @@ mod tests {
234
237
235
238
let mut resources_items = vec ! [ ] ;
236
239
for _ in 0 ..pool_size {
237
- let resource_item = pool. acquire_resource ( Duration :: from_millis ( 1000 ) ) . unwrap ( ) ;
240
+ let resource_item = pool. acquire_resource ( Duration :: from_millis ( 100 ) ) . unwrap ( ) ;
238
241
resources_items. push ( resource_item) ;
239
242
}
240
243
@@ -260,7 +263,7 @@ mod tests {
260
263
let pool = ResourcePool :: < String > :: new ( pool_size, resources_expected. clone ( ) ) ;
261
264
assert_eq ! ( pool. count( ) . unwrap( ) , pool_size) ;
262
265
263
- let mut resource_item = pool. acquire_resource ( Duration :: from_millis ( 1000 ) ) . unwrap ( ) ;
266
+ let mut resource_item = pool. acquire_resource ( Duration :: from_millis ( 100 ) ) . unwrap ( ) ;
264
267
assert_eq ! ( pool. count( ) . unwrap( ) , pool_size - 1 ) ;
265
268
pool. give_back_resource ( resource_item. into_inner ( ) , pool. discriminant ( ) . unwrap ( ) )
266
269
. unwrap ( ) ;
@@ -277,7 +280,7 @@ mod tests {
277
280
278
281
{
279
282
// Resource will be returned when resource item is dropped (will occur when exiting this block scope)
280
- let _resource_item = pool. acquire_resource ( Duration :: from_millis ( 1000 ) ) . unwrap ( ) ;
283
+ let _resource_item = pool. acquire_resource ( Duration :: from_millis ( 100 ) ) . unwrap ( ) ;
281
284
assert_eq ! ( pool. count( ) . unwrap( ) , pool_size - 1 ) ;
282
285
}
283
286
@@ -298,13 +301,13 @@ mod tests {
298
301
}
299
302
300
303
#[ tokio:: test]
301
- async fn test_resource_pool_does_not_giev_back_stale_resource ( ) {
304
+ async fn test_resource_pool_does_not_give_back_stale_resource ( ) {
302
305
let pool_size = 10 ;
303
306
let resources_expected: Vec < String > = ( 0 ..pool_size) . map ( |i| i. to_string ( ) ) . collect ( ) ;
304
307
let pool = ResourcePool :: < String > :: new ( pool_size, resources_expected. clone ( ) ) ;
305
308
assert_eq ! ( pool. count( ) . unwrap( ) , pool_size) ;
306
309
307
- let mut resource_item = pool. acquire_resource ( Duration :: from_millis ( 1000 ) ) . unwrap ( ) ;
310
+ let mut resource_item = pool. acquire_resource ( Duration :: from_millis ( 100 ) ) . unwrap ( ) ;
308
311
assert_eq ! ( pool. count( ) . unwrap( ) , pool_size - 1 ) ;
309
312
let discriminant_stale = pool. discriminant ( ) . unwrap ( ) ;
310
313
pool. set_discriminant ( pool. discriminant ( ) . unwrap ( ) + 1 )
0 commit comments