From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <yew-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 90C5B1FF162 for <inbox@lore.proxmox.com>; Mon, 5 May 2025 15:28:11 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B865B1D4AE; Mon, 5 May 2025 15:28:27 +0200 (CEST) From: Shannon Sterz <s.sterz@proxmox.com> To: yew-devel@lists.proxmox.com Date: Mon, 5 May 2025 15:28:23 +0200 Message-Id: <20250505132823.237431-1-s.sterz@proxmox.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.018 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [yew-devel] [RFC PATCH] store: use try_borrow and expect_throw for better error messages X-BeenThere: yew-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Yew framework devel list at Proxmox <yew-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/yew-devel/> List-Post: <mailto:yew-devel@lists.proxmox.com> List-Help: <mailto:yew-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/yew-devel>, <mailto:yew-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Yew framework devel list at Proxmox <yew-devel@lists.proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: yew-devel-bounces@lists.proxmox.com Sender: "yew-devel" <yew-devel-bounces@lists.proxmox.com> 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