Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit f7276ed

Browse files
committed
Get rid of backtrace mutex
1 parent c39d365 commit f7276ed

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

client/utils/src/mpsc.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ mod inner {
5151
pin::Pin,
5252
sync::{
5353
atomic::{AtomicBool, AtomicI64, Ordering},
54-
Arc, Mutex,
54+
Arc,
5555
},
5656
};
5757

@@ -67,7 +67,7 @@ mod inner {
6767
queue_size: Arc<AtomicI64>,
6868
queue_size_warning: i64,
6969
warning_fired: Arc<AtomicBool>,
70-
creation_backtrace: Arc<Mutex<Backtrace>>,
70+
creation_backtrace: Arc<Backtrace>,
7171
}
7272

7373
// Strangely, deriving `Clone` requires that `T` is also `Clone`.
@@ -108,7 +108,7 @@ mod inner {
108108
queue_size: queue_size.clone(),
109109
queue_size_warning,
110110
warning_fired: Arc::new(AtomicBool::new(false)),
111-
creation_backtrace: Arc::new(Mutex::new(Backtrace::new_unresolved())),
111+
creation_backtrace: Arc::new(Backtrace::new_unresolved()),
112112
};
113113
let receiver = TracingUnboundedReceiver { inner: r, name, queue_size };
114114
(sender, receiver)
@@ -156,12 +156,12 @@ mod inner {
156156
// `warning_fired` and `queue_size` are not synchronized, so it's possible
157157
// that the warning is fired few times before the `warning_fired` is seen
158158
// by all threads. This seems better than introducing a mutex guarding them.
159-
let mut bt = self.creation_backtrace.lock().expect("another thread panicked.");
160-
bt.resolve();
159+
let mut backtrace = (*self.creation_backtrace).clone();
160+
backtrace.resolve();
161161
error!(
162162
"The number of unprocessed messages in channel `{}` reached {}.\n\
163163
The channel was created at:\n{:?}",
164-
self.name, self.queue_size_warning, bt,
164+
self.name, self.queue_size_warning, backtrace,
165165
);
166166
}
167167

0 commit comments

Comments
 (0)