Revision: 4712
Author: [email protected]
Date: Tue May 25 02:18:08 2010
Log: Fix GC issue

A raw pointer was used while collecting a stack trace. This was not safe as the code collecting the stack trace allocated memory.
Review URL: http://codereview.chromium.org/2147005
http://code.google.com/p/v8/source/detail?r=4712

Modified:
 /branches/bleeding_edge/src/top.cc

=======================================
--- /branches/bleeding_edge/src/top.cc  Sun May  9 23:24:01 2010
+++ /branches/bleeding_edge/src/top.cc  Tue May 25 02:18:08 2010
@@ -370,8 +370,7 @@
   v8::HandleScope scope;
   // Ensure no negative values.
   int limit = Max(frame_limit, 0);
-  Handle<JSArray> stackTrace = Factory::NewJSArray(frame_limit);
-  FixedArray* frames = FixedArray::cast(stackTrace->elements());
+  Handle<JSArray> stack_trace = Factory::NewJSArray(frame_limit);

   Handle<String> column_key =  Factory::LookupAsciiSymbol("column");
   Handle<String> line_key =  Factory::LookupAsciiSymbol("lineNumber");
@@ -438,13 +437,13 @@
       SetProperty(stackFrame, constructor_key, is_constructor, NONE);
     }

-    frames->set(frames_seen, *stackFrame);
+ FixedArray::cast(stack_trace->elements())->set(frames_seen, *stackFrame);
     frames_seen++;
     it.Advance();
   }

-  stackTrace->set_length(Smi::FromInt(frames_seen));
-  return scope.Close(Utils::StackTraceToLocal(stackTrace));
+  stack_trace->set_length(Smi::FromInt(frames_seen));
+  return scope.Close(Utils::StackTraceToLocal(stack_trace));
 }


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to