Add threading assertion to WeakPtrFactory::createWeakPtr()
https://bugs.webkit.org/show_bug.cgi?id=199639
Reviewed by Ryosuke Niwa.
Source/WebCore:
* platform/ScrollableArea.cpp:
* rendering/RenderObject.cpp:
Source/WTF:
Add threading assertion to WeakPtrFactory::createWeakPtr() to make sure it
is called on the same thread where the WeakPtrFactory wad constructed.
* wtf/WeakPtr.h:
(WTF::WeakPtrFactory::WeakPtrFactory):
(WTF::WeakPtrFactory::createWeakPtr const):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@247425 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog
index 88ed0b9..0ffc55c 100644
--- a/Source/WTF/ChangeLog
+++ b/Source/WTF/ChangeLog
@@ -1,3 +1,17 @@
+2019-07-14 Chris Dumez <cdumez@apple.com>
+
+ Add threading assertion to WeakPtrFactory::createWeakPtr()
+ https://bugs.webkit.org/show_bug.cgi?id=199639
+
+ Reviewed by Ryosuke Niwa.
+
+ Add threading assertion to WeakPtrFactory::createWeakPtr() to make sure it
+ is called on the same thread where the WeakPtrFactory wad constructed.
+
+ * wtf/WeakPtr.h:
+ (WTF::WeakPtrFactory::WeakPtrFactory):
+ (WTF::WeakPtrFactory::createWeakPtr const):
+
2019-07-14 Dean Jackson <dino@apple.com>
WebGL not supported on WKWebView on UIKit for Mac
diff --git a/Source/WTF/wtf/WeakPtr.h b/Source/WTF/wtf/WeakPtr.h
index 7f108a7..715e904 100644
--- a/Source/WTF/wtf/WeakPtr.h
+++ b/Source/WTF/wtf/WeakPtr.h
@@ -26,6 +26,7 @@
#pragma once
+#include <wtf/MainThread.h>
#include <wtf/Noncopyable.h>
#include <wtf/Ref.h>
#include <wtf/ThreadSafeRefCounted.h>
@@ -114,7 +115,13 @@
WTF_MAKE_NONCOPYABLE(WeakPtrFactory<T>);
WTF_MAKE_FAST_ALLOCATED;
public:
- WeakPtrFactory() = default;
+ WeakPtrFactory()
+#if !ASSERT_DISABLED
+ : m_wasConstructedOnMainThread(isMainThread())
+#endif
+ {
+ }
+
~WeakPtrFactory()
{
if (!m_impl)
@@ -124,6 +131,7 @@
WeakPtr<T> createWeakPtr(T& object) const
{
+ ASSERT(m_wasConstructedOnMainThread == isMainThread());
if (!m_impl)
m_impl = WeakPtrImpl::create(&object);
@@ -133,6 +141,7 @@
WeakPtr<const T> createWeakPtr(const T& object) const
{
+ ASSERT(m_wasConstructedOnMainThread == isMainThread());
if (!m_impl)
m_impl = WeakPtrImpl::create(const_cast<T*>(&object));
@@ -153,6 +162,9 @@
template<typename> friend class WeakHashSet;
mutable RefPtr<WeakPtrImpl> m_impl;
+#if !ASSERT_DISABLED
+ bool m_wasConstructedOnMainThread;
+#endif
};
template<typename T> class CanMakeWeakPtr {
diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog
index 130c7f6..9e7b1a5 100644
--- a/Source/WebCore/ChangeLog
+++ b/Source/WebCore/ChangeLog
@@ -1,3 +1,13 @@
+2019-07-14 Chris Dumez <cdumez@apple.com>
+
+ Add threading assertion to WeakPtrFactory::createWeakPtr()
+ https://bugs.webkit.org/show_bug.cgi?id=199639
+
+ Reviewed by Ryosuke Niwa.
+
+ * platform/ScrollableArea.cpp:
+ * rendering/RenderObject.cpp:
+
2019-07-14 Dean Jackson <dino@apple.com>
WebGL not supported on WKWebView on UIKit for Mac
diff --git a/Source/WebCore/platform/ScrollableArea.cpp b/Source/WebCore/platform/ScrollableArea.cpp
index c8882ee..c62ad834 100644
--- a/Source/WebCore/platform/ScrollableArea.cpp
+++ b/Source/WebCore/platform/ScrollableArea.cpp
@@ -47,6 +47,9 @@
struct SameSizeAsScrollableArea {
virtual ~SameSizeAsScrollableArea();
+#if !ASSERT_DISABLED
+ bool weakPtrFactorWasConstructedOnMainThread;
+#endif
#if ENABLE(CSS_SCROLL_SNAP)
void* pointers[3];
unsigned currentIndices[2];
diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp
index 78c0958..4da3bd7 100644
--- a/Source/WebCore/rendering/RenderObject.cpp
+++ b/Source/WebCore/rendering/RenderObject.cpp
@@ -102,6 +102,9 @@
struct SameSizeAsRenderObject {
virtual ~SameSizeAsRenderObject() = default; // Allocate vtable pointer.
+#if !ASSERT_DISABLED
+ bool weakPtrFactorWasConstructedOnMainThread;
+#endif
void* pointers[5];
#ifndef NDEBUG
unsigned m_debugBitfields : 2;