fix(io-core,signer): replace unwrap() with proper error handling (#3150)

* fix(io-core,signer): replace unwrap() with proper error handling

## io-core (issue #653 item 1)
- pool.rs: replace 8 .lock().unwrap() with poisoned recovery
- pool.rs: replace semaphore acquire unwrap with graceful fallback
- deadlock_detector.rs: replace 5 .lock().unwrap() with match/ok

## signer (issue #653 item 1)
- Add SignV2Error enum, try_pre_sign_v2, try_sign_v2
- Replace 14 unwrap() in v2 signing with ? propagation
- Add try_streaming_sign_v4, replace 5 expect("err") with descriptive errors
- get_host_addr returns Result instead of panicking

All backward-compat wrappers preserved. 95 io-core + 18 signer tests pass.

* fix: address signer and pool review comments

* test: update signer v2 string-to-sign test

* fix: address signer and pool review followups

* fix: tighten signer host and pool fallback
This commit is contained in:
安正超
2026-06-01 07:40:20 +08:00
committed by GitHub
parent 9ce9ec22d1
commit bd571a575f
6 changed files with 421 additions and 73 deletions
+11 -5
View File
@@ -155,7 +155,7 @@ impl DeadlockDetector {
/// Register a new lock.
pub fn register_lock(&self, lock_type: LockType) -> u64 {
let id = {
let mut next = self.next_lock_id.lock().unwrap();
let mut next = self.next_lock_id.lock().unwrap_or_else(|e| e.into_inner());
*next += 1;
*next
};
@@ -243,7 +243,10 @@ impl DeadlockDetector {
return None;
}
let graph = self.wait_graph.lock().unwrap();
let graph = match self.wait_graph.lock() {
Ok(g) => g,
Err(_) => return None,
};
// Build adjacency list
let mut adj: HashMap<u64, Vec<u64>> = HashMap::new();
@@ -310,7 +313,10 @@ impl DeadlockDetector {
return Vec::new();
}
let locks = self.locks.lock().unwrap();
let locks = match self.locks.lock() {
Ok(l) => l,
Err(_) => return Vec::new(),
};
let mut result = Vec::new();
for (&id, info) in locks.iter() {
@@ -349,13 +355,13 @@ impl DeadlockDetector {
/// Get lock info.
pub fn get_lock_info(&self, lock_id: u64) -> Option<LockInfo> {
let locks = self.locks.lock().unwrap();
let locks = self.locks.lock().ok()?;
locks.get(&lock_id).cloned()
}
/// Get total number of registered locks.
pub fn lock_count(&self) -> usize {
let locks = self.locks.lock().unwrap();
let locks = self.locks.lock().unwrap_or_else(|e| e.into_inner());
locks.len()
}
}