2009-07-23 Jian Li <jianli@chromium.org>
authorjianli@chromium.org <jianli@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Jul 2009 20:37:02 +0000 (20:37 +0000)
committerjianli@chromium.org <jianli@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Jul 2009 20:37:02 +0000 (20:37 +0000)
        Reviewed by David Levin.

        [V8] Fix an assert in running workers in Chrome.
        https://bugs.webkit.org/show_bug.cgi?id=27620

        The fix is to change V8DOMMap::removeAllDOMObjectsInCurrentThreadHelper
        to do not call removeObjectsFromWrapperMap for certain types of DOM
        objects that exist only in main thread.

        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@46283 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/bindings/v8/V8DOMMap.cpp

index 897760f..1e3133f 100644 (file)
@@ -1,3 +1,17 @@
+2009-07-23  Jian Li  <jianli@chromium.org>
+
+        Reviewed by David Levin.
+
+        [V8] Fix an assert in running workers in Chrome.
+        https://bugs.webkit.org/show_bug.cgi?id=27620
+
+        The fix is to change V8DOMMap::removeAllDOMObjectsInCurrentThreadHelper
+        to do not call removeObjectsFromWrapperMap for certain types of DOM
+        objects that exist only in main thread.
+
+        * bindings/v8/V8DOMMap.cpp:
+        (WebCore::removeAllDOMObjectsInCurrentThreadHelper):
+
 2009-07-23  David Hyatt  <hyatt@apple.com>
 
         Reviewed by Dan Bernstein.
index c1bb29c..0904259 100644 (file)
@@ -606,22 +606,25 @@ static void removeAllDOMObjectsInCurrentThreadHelper()
     // Deref all objects in the delayed queue.
     DOMData::getCurrent()->derefDelayedObjects();
 
-    // Remove all DOM nodes.
-    DOMData::removeObjectsFromWrapperMap<Node>(getDOMNodeMap());
+    // The DOM objects with the following types only exist on the main thread.
+    if (WTF::isMainThread()) {
+        // Remove all DOM nodes.
+        DOMData::removeObjectsFromWrapperMap<Node>(getDOMNodeMap());
+
+#if ENABLE(SVG)
+        // Remove all SVG element instances in the wrapper map.
+        DOMData::removeObjectsFromWrapperMap<SVGElementInstance>(getDOMSVGElementInstanceMap());
+
+        // Remove all SVG objects with context in the wrapper map.
+        DOMData::removeObjectsFromWrapperMap<void>(getDOMSVGObjectWithContextMap());
+#endif
+    }
 
     // Remove all DOM objects in the wrapper map.
     DOMData::removeObjectsFromWrapperMap<void>(getDOMObjectMap());
 
     // Remove all active DOM objects in the wrapper map.
     DOMData::removeObjectsFromWrapperMap<void>(getActiveDOMObjectMap());
-
-#if ENABLE(SVG)
-    // Remove all SVG element instances in the wrapper map.
-    DOMData::removeObjectsFromWrapperMap<SVGElementInstance>(getDOMSVGElementInstanceMap());
-
-    // Remove all SVG objects with context in the wrapper map.
-    DOMData::removeObjectsFromWrapperMap<void>(getDOMSVGObjectWithContextMap());
-#endif
 }
 
 void removeAllDOMObjectsInCurrentThread()