Ignore:
Timestamp:
Sep 9, 2015, 3:00:58 PM (10 years ago)
Author:
[email protected]
Message:

2015-09-09 Geoffrey Garen <[email protected]>

Unreviewed, rolling back in r189516.
https://bugs.webkit.org/show_bug.cgi?id=148989

Restored changeset:

"GC should be able to discover new strong CodeBlock references
during marking"
https://bugs.webkit.org/show_bug.cgi?id=148981
http://trac.webkit.org/changeset/189516

This patch caused infinite recursion on Windows because of a pre-existing
logical error in the non-parallel GC configuration. Even in non-parallel
GC, we must set the mark bit on a CodeBlock to avoid marking it twice
(or, in the case of our crash, infinitely recursively).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/heap/Heap.cpp

    r189524 r189553  
    526526
    527527#if ENABLE(DFG_JIT)
    528     DFG::clearCodeBlockMarks(*m_vm, m_codeBlocks);
     528    DFG::clearCodeBlockMarks(*m_vm);
    529529#endif
    530530    if (m_operationInProgress == EdenCollection)
     
    662662#if ENABLE(DFG_JIT)
    663663    for (auto worklist : m_suspendedCompilerWorklists)
    664         worklist->visitWeakReferences(m_slotVisitor, m_codeBlocks);
     664        worklist->visitWeakReferences(m_slotVisitor);
    665665
    666666    if (Options::logGC() == GCLogging::Verbose)
     
    769769        harvestWeakReferences();
    770770        visitCompilerWorklistWeakReferences();
    771         m_codeBlocks.traceMarked(m_slotVisitor); // New "executing" code blocks may be discovered.
    772771        if (m_slotVisitor.isEmpty())
    773772            break;
Note: See TracChangeset for help on using the changeset viewer.