Title: [233493] trunk/Source/WebCore
- Revision
- 233493
- Author
- [email protected]
- Date
- 2018-07-03 19:33:07 -0700 (Tue, 03 Jul 2018)
Log Message
Add a release assert to diagnose infinite recursions in removeAllEventListeners()
https://bugs.webkit.org/show_bug.cgi?id=187287
Reviewed by Keith Miller.
Assert that we never re-enter removeAllEventListeners per thread.
* dom/EventTarget.cpp:
(WebCore::EventTarget::removeAllEventListeners):
* platform/ThreadGlobalData.h:
(WebCore::ThreadGlobalData::ThreadGlobalData::isInRemoveAllEventListeners const):
(WebCore::ThreadGlobalData::ThreadGlobalData::setIsInRemoveAllEventListeners):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (233492 => 233493)
--- trunk/Source/WebCore/ChangeLog 2018-07-04 01:56:08 UTC (rev 233492)
+++ trunk/Source/WebCore/ChangeLog 2018-07-04 02:33:07 UTC (rev 233493)
@@ -1,3 +1,18 @@
+2018-07-03 Ryosuke Niwa <[email protected]>
+
+ Add a release assert to diagnose infinite recursions in removeAllEventListeners()
+ https://bugs.webkit.org/show_bug.cgi?id=187287
+
+ Reviewed by Keith Miller.
+
+ Assert that we never re-enter removeAllEventListeners per thread.
+
+ * dom/EventTarget.cpp:
+ (WebCore::EventTarget::removeAllEventListeners):
+ * platform/ThreadGlobalData.h:
+ (WebCore::ThreadGlobalData::ThreadGlobalData::isInRemoveAllEventListeners const):
+ (WebCore::ThreadGlobalData::ThreadGlobalData::setIsInRemoveAllEventListeners):
+
2018-07-03 Chris Dumez <[email protected]>
performance-api/performance-observer-no-document-leak.html is flaky
Modified: trunk/Source/WebCore/dom/EventTarget.cpp (233492 => 233493)
--- trunk/Source/WebCore/dom/EventTarget.cpp 2018-07-04 01:56:08 UTC (rev 233492)
+++ trunk/Source/WebCore/dom/EventTarget.cpp 2018-07-04 02:33:07 UTC (rev 233493)
@@ -310,10 +310,16 @@
void EventTarget::removeAllEventListeners()
{
+ auto& threadData = threadGlobalData();
+ RELEASE_ASSERT(!threadData.isInRemoveAllEventListeners());
+
+ threadData.setIsInRemoveAllEventListeners(true);
+
auto* data = ""
- if (!data)
- return;
- data->eventListenerMap.clear();
+ if (data)
+ data->eventListenerMap.clear();
+
+ threadData.setIsInRemoveAllEventListeners(false);
}
void EventTarget::visitJSEventListeners(JSC::SlotVisitor& visitor)
Modified: trunk/Source/WebCore/platform/ThreadGlobalData.h (233492 => 233493)
--- trunk/Source/WebCore/platform/ThreadGlobalData.h 2018-07-04 01:56:08 UTC (rev 233492)
+++ trunk/Source/WebCore/platform/ThreadGlobalData.h 2018-07-04 02:33:07 UTC (rev 233493)
@@ -62,6 +62,9 @@
void setWebCoreThreadData();
#endif
+ bool isInRemoveAllEventListeners() const { return m_isInRemoveAllEventListeners; }
+ void setIsInRemoveAllEventListeners(bool value) { m_isInRemoveAllEventListeners = value; }
+
private:
std::unique_ptr<CachedResourceRequestInitiators> m_cachedResourceRequestInitiators;
std::unique_ptr<EventNames> m_eventNames;
@@ -72,6 +75,8 @@
bool m_isMainThread;
#endif
+ bool m_isInRemoveAllEventListeners { false };
+
std::unique_ptr<ICUConverterWrapper> m_cachedConverterICU;
WEBCORE_EXPORT friend ThreadGlobalData& threadGlobalData();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes