Fix GC crash with conditional breakpoints and JS console
authorSimon Hausmann <simon.hausmann@theqtcompany.com>
Fri, 19 Dec 2014 11:39:21 +0000 (12:39 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Fri, 19 Dec 2014 14:06:56 +0000 (15:06 +0100)
We may choose to execute an expression in a specific frame within the
debugger, which is where we pop context's until we reached the frame
in question. If we are trying to execute an expression at the top of the
stack (or with a conditional breakpoint expression), then we don't have
a frame and don't need to pop contexts. But also also don't need to call
Scope::alloc(-1).

Change-Id: I1f6754a3d77d943aed9bf4468e817a5269a3c547
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/qml/jsruntime/qv4debugging.cpp

index a835d83..50142ab 100644 (file)
@@ -65,10 +65,12 @@ public:
 
         ExecutionContextSaver saver(engine->currentContext());
 
-        Value *savedContexts = scope.alloc(frameNr);
-        for (int i = 0; i < frameNr; ++i) {
-            savedContexts[i] = engine->currentContext();
-            engine->popContext();
+        if (frameNr > 0) {
+            Value *savedContexts = scope.alloc(frameNr);
+            for (int i = 0; i < frameNr; ++i) {
+                savedContexts[i] = engine->currentContext();
+                engine->popContext();
+            }
         }
 
         ExecutionContext *ctx = engine->currentContext();