mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Don't access the reflector when dropping a Promise (fixes #18651)
The reflector may be dead already.
This commit is contained in:
parent
8e6cfbca47
commit
50d31f7ec4
1 changed files with 13 additions and 8 deletions
|
@ -19,13 +19,13 @@ use dom::globalscope::GlobalScope;
|
||||||
use dom::promisenativehandler::PromiseNativeHandler;
|
use dom::promisenativehandler::PromiseNativeHandler;
|
||||||
use dom_struct::dom_struct;
|
use dom_struct::dom_struct;
|
||||||
use js::conversions::ToJSValConvertible;
|
use js::conversions::ToJSValConvertible;
|
||||||
use js::jsapi::{CallOriginalPromiseResolve, CallOriginalPromiseReject};
|
use js::jsapi::{AddPromiseReactions, AddRawValueRoot, CallArgs, CallOriginalPromiseReject};
|
||||||
use js::jsapi::{JSAutoCompartment, CallArgs, JS_GetFunctionObject, JS_NewFunction};
|
use js::jsapi::{CallOriginalPromiseResolve, GetFunctionNativeReserved, GetPromiseState};
|
||||||
use js::jsapi::{JSContext, HandleValue, HandleObject, IsPromiseObject, GetFunctionNativeReserved};
|
use js::jsapi::{HandleObject, HandleValue, Heap, IsPromiseObject, JS_ClearPendingException};
|
||||||
use js::jsapi::{JS_ClearPendingException, JSObject, AddRawValueRoot, RemoveRawValueRoot, PromiseState};
|
use js::jsapi::{JSAutoCompartment, JSContext, JSObject, JS_GetContext, JS_GetFunctionObject};
|
||||||
use js::jsapi::{MutableHandleObject, NewPromiseObject, ResolvePromise, RejectPromise, GetPromiseState};
|
use js::jsapi::{JS_GetObjectRuntime, JS_NewFunction, MutableHandleObject};
|
||||||
use js::jsapi::{SetFunctionNativeReserved, NewFunctionWithReserved, AddPromiseReactions};
|
use js::jsapi::{NewFunctionWithReserved, NewPromiseObject, PromiseState, RejectPromise};
|
||||||
use js::jsapi::Heap;
|
use js::jsapi::{RemoveRawValueRoot, ResolvePromise, SetFunctionNativeReserved};
|
||||||
use js::jsval::{JSVal, UndefinedValue, ObjectValue, Int32Value};
|
use js::jsval::{JSVal, UndefinedValue, ObjectValue, Int32Value};
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
@ -61,8 +61,13 @@ impl PromiseHelper for Rc<Promise> {
|
||||||
impl Drop for Promise {
|
impl Drop for Promise {
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
let cx = self.global().get_cx();
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
let object = self.permanent_js_root.get().to_object();
|
||||||
|
assert!(!object.is_null());
|
||||||
|
let runtime = JS_GetObjectRuntime(object);
|
||||||
|
assert!(!runtime.is_null());
|
||||||
|
let cx = JS_GetContext(runtime);
|
||||||
|
assert!(!cx.is_null());
|
||||||
RemoveRawValueRoot(cx, self.permanent_js_root.get_unsafe());
|
RemoveRawValueRoot(cx, self.permanent_js_root.get_unsafe());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue