Add an assertion to diagnose stress GC bots test failures
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Nov 2016 03:46:51 +0000 (03:46 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Nov 2016 03:46:51 +0000 (03:46 +0000)
https://bugs.webkit.org/show_bug.cgi?id=164396

Reviewed by Antti Koivisto.

Added an assertion for calling ElementQueue::add while ElementQueue::invokeAll is in progress.
This should never happen as long as all DOM API has an appropriate CEReactions IDL attribute.

* dom/CustomElementReactionQueue.cpp:
(WebCore::CustomElementReactionStack::ElementQueue::add):
(WebCore::CustomElementReactionStack::ElementQueue::invokeAll):
* dom/CustomElementReactionQueue.h:

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

Source/WebCore/ChangeLog
Source/WebCore/dom/CustomElementReactionQueue.cpp
Source/WebCore/dom/CustomElementReactionQueue.h

index 01fd971..1a239eb 100644 (file)
@@ -1,3 +1,18 @@
+2016-11-03  Ryosuke Niwa  <rniwa@webkit.org>
+
+        Add an assertion to diagnose stress GC bots test failures
+        https://bugs.webkit.org/show_bug.cgi?id=164396
+
+        Reviewed by Antti Koivisto.
+
+        Added an assertion for calling ElementQueue::add while ElementQueue::invokeAll is in progress.
+        This should never happen as long as all DOM API has an appropriate CEReactions IDL attribute.
+
+        * dom/CustomElementReactionQueue.cpp:
+        (WebCore::CustomElementReactionStack::ElementQueue::add):
+        (WebCore::CustomElementReactionStack::ElementQueue::invokeAll):
+        * dom/CustomElementReactionQueue.h:
+
 2016-11-03  Said Abou-Hallawa  <sabouhallawa@apple.com>
 
         Add the asynchronous image decoding mode
index 64cbbf9..fe7d498 100644 (file)
@@ -205,12 +205,16 @@ void CustomElementReactionQueue::invokeAll(Element& element)
 
 inline void CustomElementReactionStack::ElementQueue::add(Element& element)
 {
+    ASSERT(!m_invoking);
     // FIXME: Avoid inserting the same element multiple times.
     m_elements.append(element);
 }
 
 inline void CustomElementReactionStack::ElementQueue::invokeAll()
 {
+#if !ASSERT_DISABLED
+    TemporaryChange<bool> invoking(m_invoking);
+#endif
     Vector<Ref<Element>> elements;
     elements.swap(m_elements);
     for (auto& element : elements) {
index 18549fe..fae6de8 100644 (file)
@@ -89,6 +89,9 @@ private:
 
     private:
         Vector<Ref<Element>> m_elements;
+#if !ASSERT_DISABLED
+        bool m_invoking { false };
+#endif
     };
 
     WEBCORE_EXPORT void processQueue();