add debug information for signal subscriptions
This commit is contained in:
1 parent
c0f2e8391c
commit
f539698963
7 files changed
+96
-13
No files matched your search
@@ -202,6 +202,7 @@ impl<T, S: Storage<SignalData<T>>> Readable for Signal<T, S> {
|
||||
let inner = self.inner.try_read()?;
|
||||
|
||||
if let Some(reactive_context) = ReactiveContext::current() {
|
||||
tracing::trace!("Subscribing to the reactive context {}", reactive_context);
|
||||
inner.subscribers.lock().unwrap().insert(reactive_context);
|
||||
}
|
||||
|
||||
@@ -244,7 +245,11 @@ impl<T: 'static, S: Storage<SignalData<T>>> Writable for Signal<T, S> {
|
||||
let borrow = S::map_mut(inner, |v| &mut v.value);
|
||||
Write {
|
||||
write: borrow,
|
||||
drop_signal: Box::new(SignalSubscriberDrop { signal: *self }),
|
||||
drop_signal: Box::new(SignalSubscriberDrop {
|
||||
signal: *self,
|
||||
#[cfg(debug_assertions)]
|
||||
origin: std::panic::Location::caller(),
|
||||
}),
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -344,10 +349,17 @@ impl<T: ?Sized, S: AnyStorage> DerefMut for Write<T, S> {
|
||||
|
||||
struct SignalSubscriberDrop<T: 'static, S: Storage<SignalData<T>>> {
|
||||
signal: Signal<T, S>,
|
||||
#[cfg(debug_assertions)]
|
||||
origin: &'static std::panic::Location<'static>,
|
||||
}
|
||||
|
||||
impl<T: 'static, S: Storage<SignalData<T>>> Drop for SignalSubscriberDrop<T, S> {
|
||||
fn drop(&mut self) {
|
||||
#[cfg(debug_assertions)]
|
||||
tracing::trace!(
|
||||
"Write on signal at {:?} finished, updating subscribers",
|
||||
self.origin
|
||||
);
|
||||
self.signal.update_subscribers();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user