Properly propagate deep aborts from within js_FindIdentifierBase (568855, r=dvander).
authorAndreas Gal <gal@mozilla.com>
Sat, 29 May 2010 00:24:26 -0700
changeset 43207 3e86dbfb0814d9c5ec74db3314fb92dbc4b9948a
parent 43206 36d81cc1a7de6770632b9cbc24ae65ad820c47e9
child 43208 51a5c26e7a6325c460c0968bd83a198413f8bad5
push id13641
push userrsayre@mozilla.com
push dateSun, 06 Jun 2010 19:08:23 +0000
treeherdermozilla-central@5b3604a3cfbe [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdvander
bugs568855
milestone1.9.3a5pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
Properly propagate deep aborts from within js_FindIdentifierBase (568855, r=dvander).
js/src/jstracer.cpp
--- a/js/src/jstracer.cpp
+++ b/js/src/jstracer.cpp
@@ -13940,19 +13940,22 @@ TraceRecorder::record_JSOP_BINDNAME()
         stack(0, INS_CONSTOBJ(obj));
         return ARECORD_CONTINUE;
     }
     LIns *obj_ins = stobj_get_parent(get(callee));
 
     // Find the target object.
     JSAtom *atom = atoms[GET_INDEX(cx->regs->pc)];
     jsid id = ATOM_TO_JSID(atom);
+    JSContext *localCx = cx;
     JSObject *obj2 = js_FindIdentifierBase(cx, fp->scopeChain, id);
     if (!obj2)
         RETURN_ERROR_A("error in js_FindIdentifierBase");
+    if (!TRACE_RECORDER(localCx))
+        return ARECORD_ABORTED;
     if (obj2 != globalObj && obj2->getClass() != &js_CallClass)
         RETURN_STOP_A("BINDNAME on non-global, non-call object");
 
     // Generate LIR to get to the target object from the start object.
     LIns *obj2_ins;
     CHECK_STATUS_A(traverseScopeChain(obj, obj_ins, obj2, obj2_ins));
 
     // If |obj2| is the global object, we can refer to it directly instead of walking up