diff --git a/bucket_map/src/bucket_api.rs b/bucket_map/src/bucket_api.rs index b6b43ebc0..61b1cfd6a 100644 --- a/bucket_map/src/bucket_api.rs +++ b/bucket_map/src/bucket_api.rs @@ -82,18 +82,24 @@ impl BucketApi { } } - fn get_write_bucket(&self) -> RwLockWriteGuard>> { - let mut bucket = self.bucket.write().unwrap(); + /// allocate new bucket if not allocated yet + fn allocate_bucket(&self, bucket: &mut RwLockWriteGuard>>) { if bucket.is_none() { - *bucket = Some(Bucket::new( + **bucket = Some(Bucket::new( Arc::clone(&self.drives), self.max_search, Arc::clone(&self.stats), Arc::clone(&self.count), )); + } + } + + fn get_write_bucket(&self) -> RwLockWriteGuard>> { + let mut bucket = self.bucket.write().unwrap(); + if let Some(bucket) = bucket.as_mut() { + bucket.handle_delayed_grows(); } else { - let write = bucket.as_mut().unwrap(); - write.handle_delayed_grows(); + self.allocate_bucket(&mut bucket); } bucket }