Try to fix the GTK bot.

Reviewed by Sam Weinig.

* runtime/Heap.cpp:
(JSC::Heap::Heap):
(JSC::Heap::markRoots): Kids, remember to initialize your data members.
Knowing is half the battle.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75866 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/runtime/Heap.cpp b/Source/JavaScriptCore/runtime/Heap.cpp
index 20e7519..de6928c 100644
--- a/Source/JavaScriptCore/runtime/Heap.cpp
+++ b/Source/JavaScriptCore/runtime/Heap.cpp
@@ -37,6 +37,7 @@
 
 Heap::Heap(JSGlobalData* globalData)
     : m_markedSpace(globalData)
+    , m_operationInProgress(NoOperation)
     , m_markListSet(0)
     , m_activityCallback(DefaultGCActivityCallback::create(this))
     , m_globalData(globalData)
@@ -259,34 +260,49 @@
 
     m_operationInProgress = Collection;
 
-    MarkStack& markStack = m_globalData->markStack;
+    // Gather conservative references. We must do this before resetting mark bits
+    // because we rely on mark bits to tell us whether a candidate reference
+    // is valid.
+    HashSet<JSCell*> machineStackReferences;
+    m_machineStackMarker.markMachineStackConservatively(machineStackReferences);
 
-    // Reset mark bits.
     m_markedSpace.clearMarkBits();
 
-    // Mark stack roots.
-    m_machineStackMarker.markMachineStackConservatively(markStack);
+    MarkStack& markStack = m_globalData->markStack;
+
+    HashSet<JSCell*>::iterator end = machineStackReferences.end();
+    for (HashSet<JSCell*>::iterator it = machineStackReferences.begin(); it != end; ++it)
+        markStack.append(*it);
+    markStack.drain();
+
+    // FIXME: Do we need extra conservatism here too?
     m_globalData->interpreter->registerFile().markCallFrames(markStack, this);
+    markStack.drain();
 
     // Mark explicitly registered roots.
     markProtectedObjects(markStack);
-    
+    markStack.drain();
+
     // Mark temporary vector for Array sorting
     markTempSortVectors(markStack);
+    markStack.drain();
 
     // Mark misc. other roots.
     if (m_markListSet && m_markListSet->size())
         MarkedArgumentBuffer::markLists(markStack, *m_markListSet);
+    markStack.drain();
+
     if (m_globalData->exception)
         markStack.append(m_globalData->exception);
     if (m_globalData->firstStringifierToMark)
         JSONObject::markStringifiers(markStack, m_globalData->firstStringifierToMark);
+    markStack.drain();
 
     // Mark the small strings cache last, since it will clear itself if nothing
     // else has marked it.
     m_globalData->smallStrings.markChildren(markStack);
-
     markStack.drain();
+
     markStack.compact();
 
     updateWeakGCHandles();