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();