Skip to content

Commit dd07d61

Browse files
committed
Prevent crash
1 parent 0ba1275 commit dd07d61

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

livekit-token-source/src/caching.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,16 +46,18 @@ pub struct TokenSourceInMemoryStore {
4646

4747
#[async_trait]
4848
impl TokenSourceStore for TokenSourceInMemoryStore {
49+
// Lock poisoning is recovered from rather than propagated: the guarded
50+
// data is a plain `Option`, left valid even if a holder panicked mid-way.
4951
async fn store(&self, options: TokenSourceFetchOptions, response: TokenSourceResponse) {
50-
*self.cached.lock().unwrap() = Some((options, response));
52+
*self.cached.lock().unwrap_or_else(|e| e.into_inner()) = Some((options, response));
5153
}
5254

5355
async fn retrieve(&self) -> Option<(TokenSourceFetchOptions, TokenSourceResponse)> {
54-
self.cached.lock().unwrap().clone()
56+
self.cached.lock().unwrap_or_else(|e| e.into_inner()).clone()
5557
}
5658

5759
async fn clear(&self) {
58-
*self.cached.lock().unwrap() = None;
60+
*self.cached.lock().unwrap_or_else(|e| e.into_inner()) = None;
5961
}
6062
}
6163

0 commit comments

Comments
 (0)