all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [yew-devel] [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions
@ 2025-05-06 12:44 Shannon Sterz
  2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 1/2] store: use try_borrow and expect for better error messages Shannon Sterz
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Shannon Sterz @ 2025-05-06 12:44 UTC (permalink / raw)
  To: yew-devel

this series adds more context to a locking failure in the first commit.
the second commit then adds functions that allow components to recover
from not being able to acquire a lock, instead of simply panicking.

--

changes since v1 (thanks @ Dominik):

- rephrase the commit message of the first commit

changes since rfc:

- don't use `UnwrapThrowExt` as it does not improve error handling
  meaningfully. (thanks @ Dominik)
- add `try_read()` and `try_write()` functions to allow components to
  recover from not being able to acquire a lock instead of panicking.

--

Shannon Sterz (2):
  store: use try_borrow and expect for better error messages
  store: add try_read() and try_write() functions

 src/state/store.rs | 32 +++++++++++++++++++++++++-------
 1 file changed, 25 insertions(+), 7 deletions(-)

--
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

* [yew-devel] [PATCH yew-widget-toolkit v2 1/2] store: use try_borrow and expect for better error messages
  2025-05-06 12:44 [yew-devel] [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Shannon Sterz
@ 2025-05-06 12:44 ` Shannon Sterz
  2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 2/2] store: add try_read() and try_write() functions Shannon Sterz
  2025-05-07  8:25 ` [yew-devel] applied: [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Dietmar Maurer
  2 siblings, 0 replies; 4+ messages in thread
From: Shannon Sterz @ 2025-05-06 12:44 UTC (permalink / raw)
  To: yew-devel

this commit adds more context for panics based on failed locks. this
is done by using `try_borrow()` and calling `expect()` on the result.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 src/state/store.rs | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/state/store.rs b/src/state/store.rs
index bde7d9da..67e72b77 100644
--- a/src/state/store.rs
+++ b/src/state/store.rs
@@ -130,7 +130,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("Could not acquire read lock on store!"),
         }
     }
 
@@ -142,7 +145,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("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

* [yew-devel] [PATCH yew-widget-toolkit v2 2/2] store: add try_read() and try_write() functions
  2025-05-06 12:44 [yew-devel] [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Shannon Sterz
  2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 1/2] store: use try_borrow and expect for better error messages Shannon Sterz
@ 2025-05-06 12:44 ` Shannon Sterz
  2025-05-07  8:25 ` [yew-devel] applied: [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Dietmar Maurer
  2 siblings, 0 replies; 4+ messages in thread
From: Shannon Sterz @ 2025-05-06 12:44 UTC (permalink / raw)
  To: yew-devel

these let users of the store decide whether failure to acquire a lock
on a store is critical enough to panic or whether this scenario can be
handled just fine.

Signed-off-by: Shannon Sterz <s.sterz@proxmox.com>
---
 src/state/store.rs | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/src/state/store.rs b/src/state/store.rs
index 67e72b77..42cb53b3 100644
--- a/src/state/store.rs
+++ b/src/state/store.rs
@@ -3,6 +3,7 @@ use std::ops::Range;
 use std::ops::{Deref, DerefMut};
 use std::rc::Rc;
 
+use anyhow::Error;
 use derivative::Derivative;
 use slab::Slab;
 
@@ -129,12 +130,18 @@ impl<T: 'static> Store<T> {
     ///
     /// Panics if the value is currently mutably locked.
     pub fn read(&self) -> StoreReadGuard<T> {
-        StoreReadGuard {
-            state: self
-                .inner
-                .try_borrow()
-                .expect("Could not acquire read lock on store!"),
-        }
+        self.try_read()
+            .expect("Could not acquire read lock on store!")
+    }
+
+    /// Try to lock this store for read access.
+    ///
+    /// Will return an error if the lock could not be acquired due to a write lock still being in
+    /// place.
+    pub fn try_read(&self) -> Result<StoreReadGuard<T>, Error> {
+        Ok(StoreReadGuard {
+            state: self.inner.try_borrow()?,
+        })
     }
 
     /// Lock this store for write access.
@@ -145,15 +152,19 @@ 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
-            .try_borrow_mut()
-            .expect("Could not acquire write lock on store!");
+        self.try_write()
+            .expect("Could not acquire write lock on store!")
+    }
 
-        StoreWriteGuard {
-            state,
+    /// Try to lock this store for write access.
+    ///
+    /// Will return an error if the lock could not be acquired due to a read or write lock still
+    /// being in place.
+    pub fn try_write(&self) -> Result<StoreWriteGuard<T>, Error> {
+        Ok(StoreWriteGuard {
+            state: self.inner.try_borrow_mut()?,
             update: true,
-        }
+        })
     }
 
     // DataStore trait implementation, so that we can use those
-- 
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

* [yew-devel] applied: [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions
  2025-05-06 12:44 [yew-devel] [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Shannon Sterz
  2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 1/2] store: use try_borrow and expect for better error messages Shannon Sterz
  2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 2/2] store: add try_read() and try_write() functions Shannon Sterz
@ 2025-05-07  8:25 ` Dietmar Maurer
  2 siblings, 0 replies; 4+ messages in thread
From: Dietmar Maurer @ 2025-05-07  8:25 UTC (permalink / raw)
  To: Yew framework devel list at Proxmox, Shannon Sterz

applied


_______________________________________________
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-07  8:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-06 12:44 [yew-devel] [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Shannon Sterz
2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 1/2] store: use try_borrow and expect for better error messages Shannon Sterz
2025-05-06 12:44 ` [yew-devel] [PATCH yew-widget-toolkit v2 2/2] store: add try_read() and try_write() functions Shannon Sterz
2025-05-07  8:25 ` [yew-devel] applied: [PATCH yew-widget-toolkit v2 0/2] improve error message on store locks and add non-panicking functions Dietmar Maurer

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