aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortanishka <109246904+taniishkaaa@users.noreply.github.com>2024-10-22 22:31:42 +0530
committerGitHub <noreply@github.com>2024-10-22 17:01:42 +0000
commit78d48ae2fb58e4c2e2a27a21d6e90f81c9fe951b (patch)
tree13e212336d0cced7af2c73e33f1daa5865273e21
parent01c9ecfe01a06ca509bdaf1d5a77d1a0d0938b2c (diff)
downloadservo-78d48ae2fb58e4c2e2a27a21d6e90f81c9fe951b.tar.gz
servo-78d48ae2fb58e4c2e2a27a21d6e90f81c9fe951b.zip
Fix GC borrow hazard in XRSession::UpdateTargetFrameRate (#33929)
* Fix GC borrow hazard in XRSession::UpdateTargetFrameRate Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com> * Limit borrow scope Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com> --------- Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>
-rw-r--r--components/script/dom/xrsession.rs28
1 files 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<Promise> {
- 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 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;
+ 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
}