all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [yew-devel] [RFC PATCH] store: use try_borrow and expect_throw for better error messages
@ 2025-05-05 13:28 Shannon Sterz
  2025-05-06  8:49 ` Dominik Csapak
  0 siblings, 1 reply; 4+ messages in thread
From: Shannon Sterz @ 2025-05-05 13:28 UTC (permalink / raw)
  To: yew-devel

this makes use of the `UnwrapThrowExt` trait to improve error messages
when acquring store locks. taking such locks in async functions can
sometimes lead to bugs that can be unreliably reproduced, this should
provide more information about the source of the error compared to
just panicking.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---

alternatively we could return the error here directly (or wrap it) and
let the call site handle such errors. however, that would require
breaking this public api, so i decided against this for now.

 src/state/store.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/state/store.rs b/src/state/store.rs
index bde7d9da..b071182c 100644
--- a/src/state/store.rs
+++ b/src/state/store.rs
@@ -10,6 +10,8 @@ use yew::html::IntoEventCallback;
 use yew::prelude::*;
 use yew::virtual_dom::Key;

+use wasm_bindgen::UnwrapThrowExt;
+
 use crate::props::{
     ExtractKeyFn, ExtractPrimaryKey, FilterFn, IntoFilterFn, IntoSorterFn, SorterFn,
 };
@@ -130,7 +132,10 @@ impl<T: 'static> Store<T> {
     /// Panics if the value is currently mutably locked.
     pub fn read(&self) -> StoreReadGuard<T> {
         StoreReadGuard {
-            state: self.inner.borrow(),
+            state: self
+                .inner
+                .try_borrow()
+                .expect_throw("Could not acquire read lock on store!"),
         }
     }

@@ -142,7 +147,11 @@ impl<T: 'static> Store<T> {
     /// When the returned [StoreWriteGuard] is dropped, the store listeners
     /// are notified. To prevent that use [StoreWriteGuard::skip_update]
     pub fn write(&self) -> StoreWriteGuard<T> {
-        let state = self.inner.borrow_mut();
+        let state = self
+            .inner
+            .try_borrow_mut()
+            .expect_throw("Could not acquire write lock on store!");
+
         StoreWriteGuard {
             state,
             update: true,
--
2.39.5



_______________________________________________
yew-devel mailing list
yew-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-05-06  9:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-05 13:28 [yew-devel] [RFC PATCH] store: use try_borrow and expect_throw for better error messages Shannon Sterz
2025-05-06  8:49 ` Dominik Csapak
2025-05-06  9:09   ` Shannon Sterz
2025-05-06  9:19     ` Dominik Csapak

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal