From 4d5f06d2bbdbe9edcbdecd82b0089f1063a75a89 Mon Sep 17 00:00:00 2001 From: Terrence Cole Date: Tue, 11 Sep 2012 14:58:47 -0700 Subject: [PATCH] Bug 790436 - Add GuardObject annotation to JS::Root; r=sfink It is invalid to use JS::Root as a temporary, since destruction order is not specified in this case. --HG-- extra : rebase_source : 1ce35c0c938fd2f7a0998bc1b9cddff222c016fd --- js/src/gc/Root.h | 51 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/js/src/gc/Root.h b/js/src/gc/Root.h index e2b637e3830e..c89a63dc7b9e 100644 --- a/js/src/gc/Root.h +++ b/js/src/gc/Root.h @@ -374,14 +374,52 @@ class Rooted : public RootedBase } public: - Rooted() : ptr(RootMethods::initial()) { init(JS::TlsRuntime); } - Rooted(const T &initial) : ptr(initial) { init(JS::TlsRuntime); } + Rooted(MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM) + : ptr(RootMethods::initial()) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(JS::TlsRuntime); + } - Rooted(JSRuntime *rt) : ptr(RootMethods::initial()) { init(rt); } - Rooted(JSRuntime *rt, T initial) : ptr(initial) { init(rt); } + Rooted(const T &initial + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : ptr(initial) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(JS::TlsRuntime); + } - Rooted(JSContext *cx) : ptr(RootMethods::initial()) { init(cx); } - Rooted(JSContext *cx, T initial) : ptr(initial) { init(cx); } + Rooted(JSRuntime *rt + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : ptr(RootMethods::initial()) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(rt); + } + + Rooted(JSRuntime *rt, T initial + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : ptr(initial) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(rt); + } + + Rooted(JSContext *cx + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : ptr(RootMethods::initial()) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(cx); + } + + Rooted(JSContext *cx, T initial + MOZ_GUARD_OBJECT_NOTIFIER_PARAM) + : ptr(initial) + { + MOZ_GUARD_OBJECT_NOTIFIER_INIT; + init(cx); + } ~Rooted() { @@ -420,6 +458,7 @@ class Rooted : public RootedBase Rooted **stack, *prev; #endif T ptr; + MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER Rooted(const Rooted &) MOZ_DELETE; };