don't
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

fix: panic on poisoned mutexes

Signed-off-by: tjh <did:plc:65gha4t3avpfpzmvpbwovss7>

+6 -29
+6 -29
crates/knot/src/model/knot_state.rs
··· 166 166 167 167 /// Acquire a lock on the jwt claims store. 168 168 pub fn jwt_claims(&self) -> MutexGuard<'_, HashMap<Box<str>, jwt::Claims>> { 169 - self.jwt_claims.lock().unwrap_or_else(|mut poisoned| { 170 - tracing::warn!("jwt claims store poisoned"); 171 - // @QUESTION Maybe we should abort() here. 172 - 173 - self.jwt_claims.clear_poison(); 174 - poisoned.get_mut().clear(); 175 - poisoned.into_inner() 176 - }) 169 + self.jwt_claims.lock().unwrap() 177 170 } 178 171 179 172 /// Get public keys the knot holds for the specified DID. ··· 407 414 pub fn cache_repository_key(&self, repo_path: &RepositoryPath, repository_key: &RepositoryKey) { 408 415 self.repo_cache 409 416 .write() 410 - .unwrap_or_else(|mut poisoned| { 411 - self.repo_cache.clear_poison(); 412 - poisoned.get_mut().clear(); 413 - poisoned.into_inner() 414 - }) 417 + .unwrap() 415 418 .insert(repo_path.clone(), repository_key.clone()); 416 419 } 417 420 418 421 pub fn remove_cached_repository_key(&self, repo_path: &RepositoryPath) { 419 - self.repo_cache 420 - .write() 421 - .unwrap_or_else(|mut poisoned| { 422 - self.repo_cache.clear_poison(); 423 - poisoned.get_mut().clear(); 424 - poisoned.into_inner() 425 - }) 426 - .remove(repo_path); 422 + self.repo_cache.write().unwrap().remove(repo_path); 427 423 } 428 424 429 425 /// Get or generate a new nonce seed for signed pushes to the specified repository. 430 426 pub fn generate_push_seed(&self, repository: &RepositoryKey) -> Box<str> { 431 427 const PUSH_SEED_NONCE_LEN: usize = 16; 432 428 433 - let mut guard = self.push_seed.lock().unwrap_or_else(|mut poisoned| { 434 - self.push_seed.clear_poison(); 435 - poisoned.get_mut().clear(); 436 - poisoned.into_inner() 437 - }); 438 - 439 - if let Some(seed) = guard.get(repository).cloned() { 429 + let mut push_seeds = self.push_seed.lock().unwrap(); 430 + if let Some(seed) = push_seeds.get(repository).cloned() { 440 431 return seed; 441 432 } 442 433 ··· 430 453 crate::BASE32_SORTABLE.encode_append(&raw_seed, &mut option); 431 454 432 455 let encoded: Box<str> = option.into(); 433 - guard.insert(repository.clone(), encoded.clone()); 456 + push_seeds.insert(repository.clone(), encoded.clone()); 434 457 encoded 435 458 } 436 459 }