2009-03-25 Geoffrey Garen <ggaren@apple.com>
authorggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Mar 2009 02:12:27 +0000 (02:12 +0000)
committerggaren@apple.com <ggaren@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 26 Mar 2009 02:12:27 +0000 (02:12 +0000)
commit0167702fc7d25084dcdc5f4bd439cffde5098f08
tree14741babee7228f1e04e32a9adf07f7f6accb179
parent7a937f39a94e3a702240cbfe9957b142c7d8077c
2009-03-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt and Darin Adler.

        Fixed <rdar://problem/6603167> Crash in WebKit!JSC::JSGlobalObject::resetPrototype
        during Stress test (#3 & #7 WER crashes for Safari 4 Beta)

        The problem was that allocation of the global object would, for just a
        moment, leave the global object's prototype unprotected from GC. This
        bug doesn't apply to non-global DOM objects because their prototypes are
        cached and marked by the global object.

        No test case because the crashing condition is hard to deterministically
        produce in a normal build, and in a Windows Release build with
        COLLECT_ON_EVERY_ALLOCATION set to 1, existing tests crash/hang.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore::JSDOMWindowShell::setWindow):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::initScript): Protect the global object's
        prototype from GC during construction, since the global object does not
        yet point to it, and therefore won't mark it.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@41997 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebCore/ChangeLog
WebCore/bindings/js/JSDOMWindowShell.cpp
WebCore/bindings/js/WorkerScriptController.cpp