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>
This commit is contained in:
tanishka 2024-10-22 22:31:42 +05:30 committed by GitHub
parent 01c9ecfe01
commit 78d48ae2fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1031,21 +1031,23 @@ impl XRSessionMethods for XRSession {
comp: InRealm, comp: InRealm,
can_gc: CanGc, can_gc: CanGc,
) -> Rc<Promise> { ) -> 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); 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); let session = self.session.borrow();
return promise; let supported_frame_rates = session.supported_frame_rates();
}
if !supported_frame_rates.contains(&*rate) { if self.mode == XRSessionMode::Inline ||
promise.reject_error(Error::Type("Provided framerate not supported".into())); supported_frame_rates.is_empty() ||
return promise; 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()); *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 promise
} }