Avoid locking when printing (#333)
* Avoid locking when printing It is not obvious that attempting to print the value of a struct could cause a deadlock. To avoid this, this patch does not lock the mutex when generating a debug representation of the h2 struct. * Use try_lock
This commit is contained in:
committed by
Sean McArthur
parent
e656c42353
commit
8387355e1b
@@ -1043,7 +1043,9 @@ impl OpaqueStreamRef {
|
||||
|
||||
impl fmt::Debug for OpaqueStreamRef {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self.inner.lock() {
|
||||
use std::sync::TryLockError::*;
|
||||
|
||||
match self.inner.try_lock() {
|
||||
Ok(me) => {
|
||||
let stream = &me.store[self.key];
|
||||
fmt.debug_struct("OpaqueStreamRef")
|
||||
@@ -1051,9 +1053,16 @@ impl fmt::Debug for OpaqueStreamRef {
|
||||
.field("ref_count", &stream.ref_count)
|
||||
.finish()
|
||||
},
|
||||
Err(_poisoned) => fmt.debug_struct("OpaqueStreamRef")
|
||||
.field("inner", &"<Poisoned>")
|
||||
.finish(),
|
||||
Err(Poisoned(_)) => {
|
||||
fmt.debug_struct("OpaqueStreamRef")
|
||||
.field("inner", &"<Poisoned>")
|
||||
.finish()
|
||||
}
|
||||
Err(WouldBlock) => {
|
||||
fmt.debug_struct("OpaqueStreamRef")
|
||||
.field("inner", &"<Locked>")
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user