Fixed emitTreeCall crashing on deep aborts (bug 472508, r=gal).
authorDavid Anderson <danderson@mozilla.com>
Tue, 24 Feb 2009 15:26:59 -0500
changeset 25489 393a83c4c7a243e022a02e2428cfc68df6fa6ea5
parent 25488 42acafcdae02d1aa8eddd308a5e8ffff30e842bc
child 25490 5178de16806170cd77e5c421556d05d5b2b8ea78
push id5575
push userrsayre@mozilla.com
push dateWed, 25 Feb 2009 09:05:38 +0000
treeherdermozilla-central@8eba35e62d92 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersgal
bugs472508
milestone1.9.2a1pre
Fixed emitTreeCall crashing on deep aborts (bug 472508, r=gal).
js/src/jstracer.cpp
--- a/js/src/jstracer.cpp
+++ b/js/src/jstracer.cpp
@@ -3587,18 +3587,19 @@ js_RecordLoopEdge(JSContext* cx, TraceRe
                 }
             }
             return js_RecordTree(cx, tm, f, old, globalShape, globalSlots);
         }
 
         r->prepareTreeCall(f);
         VMSideExit* innermostNestedGuard = NULL;
         VMSideExit* lr = js_ExecuteTree(cx, f, inlineCallCount, &innermostNestedGuard);
-        if (!lr) {
-            js_AbortRecording(cx, "Couldn't call inner tree");
+        if (!lr || r->wasDeepAborted()) {
+            if (!lr)
+                js_AbortRecording(cx, "Couldn't call inner tree");
             return false;
         }
         Fragment* old;
         switch (lr->exitType) {
           case LOOP_EXIT:
             /* If the inner tree exited on an unknown loop exit, grow the tree around it. */
             if (innermostNestedGuard) {
                 js_AbortRecording(cx, "Inner tree took different side exit, abort recording");