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