| Paste number 63191: | patch to fix gmail crash |
| Pasted by: | ggaren |
| 1 month, 3 weeks ago | |
| #webkit | Context in IRC logs | |
| Paste contents: |
| Index: VM/RegisterFile.h =================================================================== --- VM/RegisterFile.h (revision 34970) +++ VM/RegisterFile.h (working copy) @@ -165,11 +165,6 @@ namespace KJS { Register* lastGlobal() { return m_base - m_numGlobals; } - void mark(Heap* heap) - { - heap->markConservatively(lastGlobal(), m_base + m_size); - } - private: size_t m_size; const size_t m_capacity; Index: kjs/JSGlobalData.cpp =================================================================== --- kjs/JSGlobalData.cpp (revision 34970) +++ kjs/JSGlobalData.cpp (working copy) @@ -58,7 +58,7 @@ extern const HashTable stringTable; JSGlobalData::JSGlobalData(bool isShared) : machine(new Machine) - , heap(new Heap(isShared)) + , heap(new Heap(machine, isShared)) #if USE(MULTIPLE_THREADS) , arrayTable(new HashTable(KJS::arrayTable)) , dateTable(new HashTable(KJS::dateTable)) Index: kjs/JSGlobalObject.cpp =================================================================== --- kjs/JSGlobalObject.cpp (revision 34970) +++ kjs/JSGlobalObject.cpp (working copy) @@ -350,7 +350,7 @@ void JSGlobalObject::mark() RegisterFile& registerFile = globalData()->machine->registerFile(); if (registerFile.globalObject() == this) - registerFile.mark(globalData()->heap); + globalData()->heap->markConservatively(registerFile.lastGlobal(), registerFile.base()); markIfNeeded(d()->globalExec->exception()); Index: kjs/collector.cpp =================================================================== --- kjs/collector.cpp (revision 34970) +++ kjs/collector.cpp (working copy) @@ -92,9 +92,10 @@ const size_t ALLOCATIONS_PER_COLLECTION static void freeHeap(CollectorHeap*); -Heap::Heap(bool isShared) +Heap::Heap(Machine* machine, bool isShared) : m_markListSet(0) , m_isShared(isShared) + , m_machine(machine) { memset(&primaryHeap, 0, sizeof(CollectorHeap)); memset(&numberHeap, 0, sizeof(CollectorHeap)); @@ -944,6 +945,7 @@ bool Heap::collect() markProtectedObjects(); if (m_markListSet && m_markListSet->size()) ArgList::markLists(*m_markListSet); + markConservatively(m_machine->registerFile().base(), m_machine->registerFile().base() + m_machine->registerFile().size()); JAVASCRIPTCORE_GC_MARKED(); Index: kjs/collector.h =================================================================== --- kjs/collector.h (revision 34970) +++ kjs/collector.h (working copy) @@ -111,7 +111,7 @@ namespace KJS { static size_t cellOffset(const JSCell*); friend class JSGlobalData; - Heap(bool isShared); + Heap(Machine*, bool isShared); ~Heap(); void recordExtraCost(size_t); @@ -132,6 +132,8 @@ namespace KJS { HashSet<ArgList*>* m_markListSet; bool m_isShared; + + Machine* m_machine; }; // tunable parameters |
Annotations for this paste:
| Annotation number 1: | latest patch version |
| Pasted by: | ggaren |
| 1 month, 3 weeks ago | |
| Context in IRC logs | |
| Paste contents: |
| Index: VM/RegisterFile.h =================================================================== --- VM/RegisterFile.h (revision 34970) +++ VM/RegisterFile.h (working copy) @@ -164,11 +164,9 @@ namespace KJS { size_t maxGlobals() { return m_maxGlobals; } Register* lastGlobal() { return m_base - m_numGlobals; } - - void mark(Heap* heap) - { - heap->markConservatively(lastGlobal(), m_base + m_size); - } + + void markGlobals(Heap* heap) { heap->markConservatively(lastGlobal(), m_base); } + void markCallFrames(Heap* heap) { heap->markConservatively(m_base, m_base + m_size); } private: size_t m_size; Index: kjs/JSGlobalData.cpp =================================================================== --- kjs/JSGlobalData.cpp (revision 34970) +++ kjs/JSGlobalData.cpp (working copy) @@ -58,7 +58,7 @@ extern const HashTable stringTable; JSGlobalData::JSGlobalData(bool isShared) : machine(new Machine) - , heap(new Heap(isShared)) + , heap(new Heap(machine, isShared)) #if USE(MULTIPLE_THREADS) , arrayTable(new HashTable(KJS::arrayTable)) , dateTable(new HashTable(KJS::dateTable)) Index: kjs/JSGlobalObject.cpp =================================================================== --- kjs/JSGlobalObject.cpp (revision 34970) +++ kjs/JSGlobalObject.cpp (working copy) @@ -350,7 +350,7 @@ void JSGlobalObject::mark() RegisterFile& registerFile = globalData()->machine->registerFile(); if (registerFile.globalObject() == this) - registerFile.mark(globalData()->heap); + registerFile.markGlobals(globalData()->heap); markIfNeeded(d()->globalExec->exception()); Index: kjs/collector.cpp =================================================================== --- kjs/collector.cpp (revision 34970) +++ kjs/collector.cpp (working copy) @@ -92,9 +92,10 @@ const size_t ALLOCATIONS_PER_COLLECTION static void freeHeap(CollectorHeap*); -Heap::Heap(bool isShared) +Heap::Heap(Machine* machine, bool isShared) : m_markListSet(0) , m_isShared(isShared) + , m_machine(machine) { memset(&primaryHeap, 0, sizeof(CollectorHeap)); memset(&numberHeap, 0, sizeof(CollectorHeap)); @@ -944,6 +945,7 @@ bool Heap::collect() markProtectedObjects(); if (m_markListSet && m_markListSet->size()) ArgList::markLists(*m_markListSet); + m_machine->registerFile().markCallFrames(this); JAVASCRIPTCORE_GC_MARKED(); Index: kjs/collector.h =================================================================== --- kjs/collector.h (revision 34970) +++ kjs/collector.h (working copy) @@ -111,7 +111,7 @@ namespace KJS { static size_t cellOffset(const JSCell*); friend class JSGlobalData; - Heap(bool isShared); + Heap(Machine*, bool isShared); ~Heap(); void recordExtraCost(size_t); @@ -132,6 +132,8 @@ namespace KJS { HashSet<ArgList*>* m_markListSet; bool m_isShared; + + Machine* m_machine; }; // tunable parameters |