Title: [216520] branches/safari-603-branch/Source/WebCore
Revision
216520
Author
matthew_han...@apple.com
Date
2017-05-09 11:05:04 -0700 (Tue, 09 May 2017)

Log Message

Cherry-pick r215528. rdar://problem/31971331

Modified Paths

Diff

Modified: branches/safari-603-branch/Source/WebCore/ChangeLog (216519 => 216520)


--- branches/safari-603-branch/Source/WebCore/ChangeLog	2017-05-09 18:05:01 UTC (rev 216519)
+++ branches/safari-603-branch/Source/WebCore/ChangeLog	2017-05-09 18:05:04 UTC (rev 216520)
@@ -1,5 +1,29 @@
 2017-05-09  Matthew Hanson  <matthew_han...@apple.com>
 
+        Cherry-pick r215528. rdar://problem/31971331
+
+    2017-04-19  Joseph Pecoraro  <pecor...@apple.com>
+
+            ASAN Crash running LayoutTests/inspector/worker tests
+            https://bugs.webkit.org/show_bug.cgi?id=170967
+            <rdar://problem/31256437>
+
+            Reviewed by Alex Christensen.
+
+            * workers/WorkerMessagingProxy.h:
+            * workers/WorkerMessagingProxy.cpp:
+            (WebCore::WorkerMessagingProxy::WorkerMessagingProxy):
+            (WebCore::WorkerMessagingProxy::workerGlobalScopeDestroyedInternal):
+            Make the MessagingProxy thread safe ref counted. Since it used to
+            delete itself, turn this into a ref (implicit on construction)
+            and deref (replacing delete this).
+
+            (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
+            When dispatching have the lambda implicitly ref/deref with the
+            lambda to keep the proxy alive while a lambda is queued.
+
+2017-05-09  Matthew Hanson  <matthew_han...@apple.com>
+
         Cherry-pick r214554. rdar://problem/31971164
 
     2017-03-29  Jeremy Jones  <jere...@apple.com>

Modified: branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.cpp (216519 => 216520)


--- branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.cpp	2017-05-09 18:05:01 UTC (rev 216519)
+++ branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.cpp	2017-05-09 18:05:04 UTC (rev 216520)
@@ -65,6 +65,9 @@
     ASSERT(m_workerObject);
     ASSERT((is<Document>(*m_scriptExecutionContext) && isMainThread())
         || (is<WorkerGlobalScope>(*m_scriptExecutionContext) && currentThread() == downcast<WorkerGlobalScope>(*m_scriptExecutionContext).thread().threadID()));
+
+    // Nobody outside this class ref counts this object. The original ref
+    // is balanced by the deref in workerGlobalScopeDestroyedInternal.
 }
 
 WorkerMessagingProxy::~WorkerMessagingProxy()
@@ -169,8 +172,9 @@
 
 void WorkerMessagingProxy::postMessageToPageInspector(const String& message)
 {
-    RunLoop::main().dispatch([this, message = message.isolatedCopy()] {
-        m_inspectorProxy->sendMessageFromWorkerToFrontend(message);
+    RunLoop::main().dispatch([this, protectedThis = makeRef(*this), message = message.isolatedCopy()] {
+        if (!m_mayBeDestroyed)
+            m_inspectorProxy->sendMessageFromWorkerToFrontend(message);
     });
 }
 
@@ -240,8 +244,9 @@
 
     m_inspectorProxy->workerTerminated();
 
+    // This balances the original ref in construction.
     if (m_mayBeDestroyed)
-        delete this;
+        deref();
 }
 
 void WorkerMessagingProxy::terminateWorkerGlobalScope()

Modified: branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.h (216519 => 216520)


--- branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.h	2017-05-09 18:05:01 UTC (rev 216519)
+++ branches/safari-603-branch/Source/WebCore/workers/WorkerMessagingProxy.h	2017-05-09 18:05:04 UTC (rev 216520)
@@ -20,7 +20,7 @@
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #pragma once
@@ -34,6 +34,7 @@
 #include <wtf/Noncopyable.h>
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefPtr.h>
+#include <wtf/ThreadSafeRefCounted.h>
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -43,10 +44,11 @@
     class Worker;
     class WorkerInspectorProxy;
 
-    class WorkerMessagingProxy : public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy {
+    class WorkerMessagingProxy : public ThreadSafeRefCounted<WorkerMessagingProxy>, public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy {
         WTF_MAKE_NONCOPYABLE(WorkerMessagingProxy); WTF_MAKE_FAST_ALLOCATED;
     public:
         explicit WorkerMessagingProxy(Worker*);
+        virtual ~WorkerMessagingProxy();
 
         // Implementations of WorkerGlobalScopeProxy.
         // (Only use these methods in the worker object thread.)
@@ -78,9 +80,6 @@
         // Only use this method on the worker object thread.
         bool askedToTerminate() const { return m_askedToTerminate; }
 
-    protected:
-        virtual ~WorkerMessagingProxy();
-
     private:
         void workerGlobalScopeDestroyedInternal();
         void reportPendingActivityInternal(bool confirmingMessage, bool hasPendingActivity);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to