Reviewed by Darin Adler.
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Feb 2007 22:10:38 +0000 (22:10 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Feb 2007 22:10:38 +0000 (22:10 +0000)
commit29c6446e227bb0155b45302d615b68331ff1457a
tree4788b0792b684da023064c5f41372c06aef6d846
parent9709ba9fcea5dcb89fd40f24b7647270fb65b00b
    Reviewed by Darin Adler.

        Fixed <rdar://problem/4942528> Installer.app Stuck "Examining additional
        volumes..."

        The problem was that JavaScriptGlue held a JSObject in a static pointer
        without protecting it from garbage collection.

            sUserObjectPrototypeImp  = new UserObjectPrototypeImp();
            static ProtectedPtr<UserObjectPrototypeImp> protectPrototype; // valiant, brave, but useless

        Through an interesting comedy of errors, this object would be collected
        and then assigned as the prototype of another object allocated at the
        same address, thus becoming its own prototype. (See http://www.ziplo.com/grandpa.htm
        for further explanation of this phenomenon.) Hence the infinte loop in
        property lookup.

        The solution is equally humorous: all of this code was completely useless --
        it only served to create an empty object in the prototype chain -- so
        I just removed it.

        * UserObjectImp.cpp:
        (UserObjectImp::UserObjectImp):
        * UserObjectImp.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@19805 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JavaScriptGlue/ChangeLog
JavaScriptGlue/UserObjectImp.cpp
JavaScriptGlue/UserObjectImp.h