From 78d48ae2fb58e4c2e2a27a21d6e90f81c9fe951b Mon Sep 17 00:00:00 2001 From: tanishka <109246904+taniishkaaa@users.noreply.github.com> Date: Tue, 22 Oct 2024 22:31:42 +0530 Subject: [PATCH] Fix GC borrow hazard in XRSession::UpdateTargetFrameRate (#33929) * Fix GC borrow hazard in XRSession::UpdateTargetFrameRate Signed-off-by: taniishkaaa * Limit borrow scope Signed-off-by: taniishkaaa --------- Signed-off-by: taniishkaaa --- components/script/dom/xrsession.rs | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index 3fb0a14fe13..33d27a8eebc 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -1031,21 +1031,23 @@ impl XRSessionMethods for XRSession { comp: InRealm, can_gc: CanGc, ) -> Rc { - let mut session = self.session.borrow_mut(); - let supported_frame_rates = session.supported_frame_rates(); let promise = Promise::new_in_current_realm(comp, can_gc); - - if self.mode == XRSessionMode::Inline || - supported_frame_rates.is_empty() || - self.ended.get() { - promise.reject_error(Error::InvalidState); - return promise; - } + let session = self.session.borrow(); + let supported_frame_rates = session.supported_frame_rates(); - if !supported_frame_rates.contains(&*rate) { - promise.reject_error(Error::Type("Provided framerate not supported".into())); - return promise; + if self.mode == XRSessionMode::Inline || + supported_frame_rates.is_empty() || + self.ended.get() + { + promise.reject_error(Error::InvalidState); + return promise; + } + + if !supported_frame_rates.contains(&*rate) { + promise.reject_error(Error::Type("Provided framerate not supported".into())); + return promise; + } } *self.update_framerate_promise.borrow_mut() = Some(promise.clone()); @@ -1075,7 +1077,7 @@ impl XRSessionMethods for XRSession { }), ); - session.update_frame_rate(*rate, sender); + self.session.borrow_mut().update_frame_rate(*rate, sender); promise }