diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2018-03-13 15:44:21 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2018-03-15 09:53:33 +0100 |
commit | 50d31f7ec4f9e9238af56c70ce986f13115a8b7f (patch) | |
tree | 8e8c97310e84f52ce8b8f3bcad153949b741dbd1 /components/script/dom/promise.rs | |
parent | 8e6cfbca47a259f20ba1c0d09e599169372d4930 (diff) | |
download | servo-50d31f7ec4f9e9238af56c70ce986f13115a8b7f.tar.gz servo-50d31f7ec4f9e9238af56c70ce986f13115a8b7f.zip |
Don't access the reflector when dropping a Promise (fixes #18651)
The reflector may be dead already.
Diffstat (limited to 'components/script/dom/promise.rs')
-rw-r--r-- | components/script/dom/promise.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs index 20485618c18..ef5eb1906d5 100644 --- a/components/script/dom/promise.rs +++ b/components/script/dom/promise.rs @@ -19,13 +19,13 @@ use dom::globalscope::GlobalScope; use dom::promisenativehandler::PromiseNativeHandler; use dom_struct::dom_struct; use js::conversions::ToJSValConvertible; -use js::jsapi::{CallOriginalPromiseResolve, CallOriginalPromiseReject}; -use js::jsapi::{JSAutoCompartment, CallArgs, JS_GetFunctionObject, JS_NewFunction}; -use js::jsapi::{JSContext, HandleValue, HandleObject, IsPromiseObject, GetFunctionNativeReserved}; -use js::jsapi::{JS_ClearPendingException, JSObject, AddRawValueRoot, RemoveRawValueRoot, PromiseState}; -use js::jsapi::{MutableHandleObject, NewPromiseObject, ResolvePromise, RejectPromise, GetPromiseState}; -use js::jsapi::{SetFunctionNativeReserved, NewFunctionWithReserved, AddPromiseReactions}; -use js::jsapi::Heap; +use js::jsapi::{AddPromiseReactions, AddRawValueRoot, CallArgs, CallOriginalPromiseReject}; +use js::jsapi::{CallOriginalPromiseResolve, GetFunctionNativeReserved, GetPromiseState}; +use js::jsapi::{HandleObject, HandleValue, Heap, IsPromiseObject, JS_ClearPendingException}; +use js::jsapi::{JSAutoCompartment, JSContext, JSObject, JS_GetContext, JS_GetFunctionObject}; +use js::jsapi::{JS_GetObjectRuntime, JS_NewFunction, MutableHandleObject}; +use js::jsapi::{NewFunctionWithReserved, NewPromiseObject, PromiseState, RejectPromise}; +use js::jsapi::{RemoveRawValueRoot, ResolvePromise, SetFunctionNativeReserved}; use js::jsval::{JSVal, UndefinedValue, ObjectValue, Int32Value}; use std::ptr; use std::rc::Rc; @@ -61,8 +61,13 @@ impl PromiseHelper for Rc<Promise> { impl Drop for Promise { #[allow(unsafe_code)] fn drop(&mut self) { - let cx = self.global().get_cx(); 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()); } } |