Bug 1356103 - Part 1: Add WeakPtrTraits to allow SupportsWeakPtr classes to opt in to more permissive thread ownership assertions. r=bholley

MozReview-Commit-ID: 62pJc2N8aIo

--HG--
extra : rebase_source : b1fed73b2c03d1cc1261a674a44fe578c2fe7d99
This commit is contained in:
Cameron McCormack 2017-04-30 12:14:06 +08:00
parent 8c7f357d42
commit a5624c6f9d

View File

@ -112,8 +112,11 @@
_empty = !p; \
} while (false)
#define MOZ_WEAKPTR_ASSERT_THREAD_SAFETY() \
MOZ_DIAGNOSTIC_ASSERT(_empty || _owningThread == std::this_thread::get_id(), \
"WeakPtr used on multiple threads")
do { \
if (!(_empty || _owningThread == std::this_thread::get_id())) { \
WeakPtrTraits<T>::AssertSafeToAccessFromNonOwningThread(); \
} \
} while (false)
#define MOZ_WEAKPTR_ASSERT_THREAD_SAFETY_DELEGATED(that) \
(that)->AssertThreadSafety();
@ -140,6 +143,15 @@ template <typename T> class SupportsWeakPtr;
#define MOZ_DECLARE_WEAKREFERENCE_TYPENAME(T)
#endif
template<class T>
struct WeakPtrTraits
{
static void AssertSafeToAccessFromNonOwningThread()
{
MOZ_DIAGNOSTIC_ASSERT(false, "WeakPtr accessed from multiple threads");
}
};
namespace detail {
// This can live beyond the lifetime of the class derived from