Title: [212698] trunk
Revision
212698
Author
commit-qu...@webkit.org
Date
2017-02-20 21:02:32 -0800 (Mon, 20 Feb 2017)

Log Message

ASSERTION FAILED: m_normalWorld->hasOneRef() under WorkerThread::stop
https://bugs.webkit.org/show_bug.cgi?id=168356
<rdar://problem/30592486>

Patch by Joseph Pecoraro <pecor...@apple.com> on 2017-02-20
Reviewed by Ryosuke Niwa.

Source/WebCore:

* page/DOMWindow.cpp:
(WebCore::DOMWindow::removeAllEventListeners):
Remove Performance object EventListeners.

* workers/WorkerGlobalScope.cpp:
(WebCore::WorkerGlobalScope::~WorkerGlobalScope):
(WebCore::WorkerGlobalScope::removeAllEventListeners):
(WebCore::WorkerGlobalScope::performance):
* workers/WorkerGlobalScope.h:
Remove Performance object EventListeners.
Also clear Performance early in destruction since its ContextDestructionObserver
destruction makes checks about the WorkerThread.

LayoutTests:

* TestExpectations:
Unskip tests now that they no longer trigger assertions.

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (212697 => 212698)


--- trunk/LayoutTests/ChangeLog	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/LayoutTests/ChangeLog	2017-02-21 05:02:32 UTC (rev 212698)
@@ -1,3 +1,14 @@
+2017-02-20  Joseph Pecoraro  <pecor...@apple.com>
+
+        ASSERTION FAILED: m_normalWorld->hasOneRef() under WorkerThread::stop
+        https://bugs.webkit.org/show_bug.cgi?id=168356
+        <rdar://problem/30592486>
+
+        Reviewed by Ryosuke Niwa.
+
+        * TestExpectations:
+        Unskip tests now that they no longer trigger assertions.
+
 2017-02-20  Jer Noble  <jer.no...@apple.com>
 
         Local audio-only stream will not trigger playback to begin

Modified: trunk/LayoutTests/TestExpectations (212697 => 212698)


--- trunk/LayoutTests/TestExpectations	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/LayoutTests/TestExpectations	2017-02-21 05:02:32 UTC (rev 212698)
@@ -310,9 +310,8 @@
 # Failing assertion with dynamic message
 imported/w3c/web-platform-tests/XMLHttpRequest/responsexml-document-properties.htm [ Failure ]
 
-# Failing with dynamic URLs.
+webkit.org/b/161088 imported/w3c/web-platform-tests/resource-timing/resource-timing.html [ Pass Failure ]
 webkit.org/b/168357 imported/w3c/web-platform-tests/resource-timing/rt-initiatorType-media.html [ Failure ]
-
 webkit.org/b/168448 imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-frames.html [ Pass Failure ]
 webkit.org/b/168448 imported/w3c/web-platform-tests/resource-timing/rt-shared-resource-in-workers.html [ Pass Failure ]
 
@@ -979,10 +978,6 @@
 
 webkit.org/b/160017 js/regress-139548.html [ Slow ]
 
-webkit.org/b/161088 imported/w3c/web-platform-tests/resource-timing/resource-timing.html [ Pass Failure ]
-
-webkit.org/b/168356 [ Debug ] imported/w3c/web-platform-tests/resource-timing [ Skip ]
-
 # Only iOS has implemented lettepress.
 fast/text/letterpress-different.html [ ImageOnlyFailure ]
 

Modified: trunk/Source/WebCore/ChangeLog (212697 => 212698)


--- trunk/Source/WebCore/ChangeLog	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/Source/WebCore/ChangeLog	2017-02-21 05:02:32 UTC (rev 212698)
@@ -1,3 +1,24 @@
+2017-02-20  Joseph Pecoraro  <pecor...@apple.com>
+
+        ASSERTION FAILED: m_normalWorld->hasOneRef() under WorkerThread::stop
+        https://bugs.webkit.org/show_bug.cgi?id=168356
+        <rdar://problem/30592486>
+
+        Reviewed by Ryosuke Niwa.
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::removeAllEventListeners):
+        Remove Performance object EventListeners.
+
+        * workers/WorkerGlobalScope.cpp:
+        (WebCore::WorkerGlobalScope::~WorkerGlobalScope):
+        (WebCore::WorkerGlobalScope::removeAllEventListeners):
+        (WebCore::WorkerGlobalScope::performance):
+        * workers/WorkerGlobalScope.h:
+        Remove Performance object EventListeners.
+        Also clear Performance early in destruction since its ContextDestructionObserver
+        destruction makes checks about the WorkerThread.
+
 2017-02-20  Jer Noble  <jer.no...@apple.com>
 
         Local audio-only stream will not trigger playback to begin

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (212697 => 212698)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2017-02-21 05:02:32 UTC (rev 212698)
@@ -2027,6 +2027,11 @@
         controller->removeAllDeviceEventListeners(this);
 #endif
 
+#if ENABLE(WEB_TIMING)
+    if (m_performance)
+        m_performance->removeAllEventListeners();
+#endif
+
     removeAllUnloadEventListeners(this);
     removeAllBeforeUnloadEventListeners(this);
 }

Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.cpp (212697 => 212698)


--- trunk/Source/WebCore/workers/WorkerGlobalScope.cpp	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.cpp	2017-02-21 05:02:32 UTC (rev 212698)
@@ -97,10 +97,23 @@
 {
     ASSERT(currentThread() == thread().threadID());
 
+#if ENABLE(WEB_TIMING)
+    m_performance = nullptr;
+#endif
+
     // Notify proxy that we are going away. This can free the WorkerThread object, so do not access it after this.
     thread().workerReportingProxy().workerGlobalScopeDestroyed();
 }
 
+void WorkerGlobalScope::removeAllEventListeners()
+{
+    EventTarget::removeAllEventListeners();
+
+#if ENABLE(WEB_TIMING)
+    m_performance->removeAllEventListeners();
+#endif
+}
+
 void WorkerGlobalScope::applyContentSecurityPolicyResponseHeaders(const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders)
 {
     contentSecurityPolicy()->didReceiveHeaders(contentSecurityPolicyResponseHeaders);
@@ -358,7 +371,7 @@
 
 Performance& WorkerGlobalScope::performance() const
 {
-    return m_performance;
+    return *m_performance;
 }
 
 #endif

Modified: trunk/Source/WebCore/workers/WorkerGlobalScope.h (212697 => 212698)


--- trunk/Source/WebCore/workers/WorkerGlobalScope.h	2017-02-21 04:44:17 UTC (rev 212697)
+++ trunk/Source/WebCore/workers/WorkerGlobalScope.h	2017-02-21 05:02:32 UTC (rev 212698)
@@ -104,6 +104,8 @@
     Performance& performance() const;
 #endif
 
+    void removeAllEventListeners() final;
+
 protected:
     WorkerGlobalScope(const URL&, const String& identifier, const String& userAgent, WorkerThread&, bool shouldBypassMainWorldContentSecurityPolicy, Ref<SecurityOrigin>&& topOrigin, MonotonicTime timeOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);
 
@@ -177,7 +179,7 @@
 #endif
 
 #if ENABLE(WEB_TIMING)
-    Ref<Performance> m_performance;
+    RefPtr<Performance> m_performance;
 #endif
 
     mutable RefPtr<Crypto> m_crypto;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to