Title: [86974] trunk/Source/_javascript_Core
Revision
86974
Author
commit-qu...@webkit.org
Date
2011-05-20 12:06:29 -0700 (Fri, 20 May 2011)

Log Message

2011-05-20  Zoltan Herczeg  <zherc...@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Zombies should "live" forever
        https://bugs.webkit.org/show_bug.cgi?id=61170

        Reusing zombie cells could still hide garbage
        collected cell related bugs.

        * _javascript_Core.pro:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::clearMarks):
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::isZombie):
        * runtime/JSZombie.h:
        (JSC::JSZombie::~JSZombie):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (86973 => 86974)


--- trunk/Source/_javascript_Core/ChangeLog	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-05-20 19:06:29 UTC (rev 86974)
@@ -1,3 +1,26 @@
+2011-05-20  Zoltan Herczeg  <zherc...@inf.u-szeged.hu>
+
+        Reviewed by Oliver Hunt.
+
+        Zombies should "live" forever
+        https://bugs.webkit.org/show_bug.cgi?id=61170
+
+        Reusing zombie cells could still hide garbage
+        collected cell related bugs.
+
+        * _javascript_Core.pro:
+        * heap/MarkedBlock.cpp:
+        (JSC::MarkedBlock::clearMarks):
+        * heap/MarkedBlock.h:
+        * heap/MarkedSpace.cpp:
+        (JSC::MarkedSpace::destroy):
+        * runtime/JSCell.h:
+        (JSC::JSCell::JSValue::isZombie):
+        * runtime/JSZombie.h:
+        (JSC::JSZombie::~JSZombie):
+        * runtime/WriteBarrier.h:
+        (JSC::WriteBarrierBase::setWithoutWriteBarrier):
+
 2011-05-20  Brady Eidson  <beid...@apple.com>
 
         Reviewed by Sam Weinig.

Modified: trunk/Source/_javascript_Core/_javascript_Core.pro (86973 => 86974)


--- trunk/Source/_javascript_Core/_javascript_Core.pro	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/_javascript_Core.pro	2011-05-20 19:06:29 UTC (rev 86974)
@@ -62,9 +62,7 @@
     assembler/ARMAssembler.cpp \
     assembler/ARMv7Assembler.cpp \
     assembler/MacroAssemblerARM.cpp \
-    assembler/MacroAssemblerSH4.h \
     assembler/MacroAssemblerSH4.cpp \
-    assembler/SH4Assembler.h \
     bytecode/CodeBlock.cpp \
     bytecode/JumpTable.cpp \
     bytecode/Opcode.cpp \
@@ -167,6 +165,7 @@
     runtime/JSValue.cpp \
     runtime/JSVariableObject.cpp \
     runtime/JSWrapperObject.cpp \
+    runtime/JSZombie.cpp \
     runtime/LiteralParser.cpp \
     runtime/Lookup.cpp \
     runtime/MathObject.cpp \

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.cpp (86973 => 86974)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.cpp	2011-05-20 19:06:29 UTC (rev 86974)
@@ -86,4 +86,19 @@
     }
 }
 
+#if ENABLE(JSC_ZOMBIES)
+void MarkedBlock::clearMarks()
+{
+    /* Keep our precious zombies! */
+    for (size_t i = firstAtom(); i < m_endAtom; i += m_atomsPerCell) {
+        if (m_marks.get(i))
+            continue;
+
+        JSCell* cell = reinterpret_cast<JSCell*>(&atoms()[i]);
+        if (!cell->isZombie())
+            m_marks.clear(i);
+    }
+}
+#endif
+
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/heap/MarkedBlock.h (86973 => 86974)


--- trunk/Source/_javascript_Core/heap/MarkedBlock.h	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/heap/MarkedBlock.h	2011-05-20 19:06:29 UTC (rev 86974)
@@ -154,10 +154,12 @@
         return m_marks.isEmpty();
     }
 
+#if !ENABLE(JSC_ZOMBIES)
     inline void MarkedBlock::clearMarks()
     {
         m_marks.clearAll();
     }
+#endif
     
     inline size_t MarkedBlock::markCount()
     {

Modified: trunk/Source/_javascript_Core/heap/MarkedSpace.cpp (86973 => 86974)


--- trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/heap/MarkedSpace.cpp	2011-05-20 19:06:29 UTC (rev 86974)
@@ -46,9 +46,12 @@
 
 void MarkedSpace::destroy()
 {
+    /* Keep our precious zombies! */
+#if !ENABLE(JSC_ZOMBIES)
     clearMarks();
     shrink();
     ASSERT(!size());
+#endif
 }
 
 MarkedBlock* MarkedSpace::allocateBlock(SizeClass& sizeClass)

Modified: trunk/Source/_javascript_Core/runtime/JSCell.h (86973 => 86974)


--- trunk/Source/_javascript_Core/runtime/JSCell.h	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/runtime/JSCell.h	2011-05-20 19:06:29 UTC (rev 86974)
@@ -355,11 +355,11 @@
     {
         return MarkedSpace::heap(c);
     }
-    
+
 #if ENABLE(JSC_ZOMBIES)
     inline bool JSValue::isZombie() const
     {
-        return isCell() && asCell() > (JSCell*)0x1ffffffffL && asCell()->isZombie();
+        return isCell() && asCell()->isZombie();
     }
 #endif
 

Modified: trunk/Source/_javascript_Core/runtime/JSZombie.h (86973 => 86974)


--- trunk/Source/_javascript_Core/runtime/JSZombie.h	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/runtime/JSZombie.h	2011-05-20 19:06:29 UTC (rev 86974)
@@ -41,6 +41,12 @@
         ASSERT(inherits(&s_info));
     }
 
+    ~JSZombie()
+    {
+        /* Zombie cells should never been reused. */
+        ASSERT_NOT_REACHED();
+    }
+
     virtual bool isZombie() const { return true; }
 
     virtual bool isGetterSetter() const { ASSERT_NOT_REACHED(); return false; }

Modified: trunk/Source/_javascript_Core/runtime/WriteBarrier.h (86973 => 86974)


--- trunk/Source/_javascript_Core/runtime/WriteBarrier.h	2011-05-20 19:04:52 UTC (rev 86973)
+++ trunk/Source/_javascript_Core/runtime/WriteBarrier.h	2011-05-20 19:06:29 UTC (rev 86974)
@@ -129,7 +129,7 @@
     {
         this->m_cell = reinterpret_cast<JSCell*>(value);
 #if ENABLE(JSC_ZOMBIES)
-        ASSERT(!m_cell || !isZombie(m_cell));
+        ASSERT(!m_cell || value == reinterpret_cast<T*>(1) || !isZombie(m_cell));
 #endif
     }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to