aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/promise.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2018-03-13 15:44:21 +0100
committerAnthony Ramine <n.oxyde@gmail.com>2018-03-15 09:53:33 +0100
commit50d31f7ec4f9e9238af56c70ce986f13115a8b7f (patch)
tree8e8c97310e84f52ce8b8f3bcad153949b741dbd1 /components/script/dom/promise.rs
parent8e6cfbca47a259f20ba1c0d09e599169372d4930 (diff)
downloadservo-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.rs21
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());
}
}