Unreviewed, rolling out r241770.
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Feb 2019 23:18:27 +0000 (23:18 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Feb 2019 23:18:27 +0000 (23:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194833

Caused crashes (Requested by smfr on #webkit).

Reverted changeset:

"Code quality cleanup in NeverDestroyed"
https://bugs.webkit.org/show_bug.cgi?id=194824
https://trac.webkit.org/changeset/241770

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@241782 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/NeverDestroyed.h

index 7ed6327..6b7ff09 100644 (file)
@@ -1,3 +1,16 @@
+2019-02-19  Commit Queue  <commit-queue@webkit.org>
+
+        Unreviewed, rolling out r241770.
+        https://bugs.webkit.org/show_bug.cgi?id=194833
+
+        Caused crashes (Requested by smfr on #webkit).
+
+        Reverted changeset:
+
+        "Code quality cleanup in NeverDestroyed"
+        https://bugs.webkit.org/show_bug.cgi?id=194824
+        https://trac.webkit.org/changeset/241770
+
 2019-02-19  Keith Miller  <keith_miller@apple.com>
 
         Code quality cleanup in NeverDestroyed
index e7e8a7e..c311f13 100644 (file)
@@ -27,7 +27,6 @@
 
 #include <type_traits>
 #include <utility>
-#include <wtf/ForbidHeapAllocation.h>
 #include <wtf/RefCounted.h>
 
 // NeverDestroyed is a smart-pointer-like class that ensures that the destructor
@@ -44,9 +43,8 @@ namespace WTF {
 
 template<typename T> class NeverDestroyed {
     WTF_MAKE_NONCOPYABLE(NeverDestroyed);
-    WTF_FORBID_HEAP_ALLOCATION;
-public:
 
+public:
     template<typename... Args> NeverDestroyed(Args&&... args)
     {
         MaybeRelax<T>(new (storagePointer()) T(std::forward<Args>(args)...));
@@ -68,16 +66,16 @@ private:
 
     PointerType storagePointer() const { return const_cast<PointerType>(reinterpret_cast<const T*>(&m_storage)); }
 
+    // FIXME: Investigate whether we should allocate a hunk of virtual memory
+    // and hand out chunks of it to NeverDestroyed instead, to reduce fragmentation.
+    typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type m_storage;
+
     template<typename PtrType, bool ShouldRelax = std::is_base_of<RefCountedBase, PtrType>::value> struct MaybeRelax {
         explicit MaybeRelax(PtrType*) { }
     };
     template<typename PtrType> struct MaybeRelax<PtrType, true> {
         explicit MaybeRelax(PtrType* ptr) { ptr->relaxAdoptionRequirement(); }
     };
-
-    // FIXME: Investigate whether we should allocate a hunk of virtual memory
-    // and hand out chunks of it to NeverDestroyed instead, to reduce fragmentation.
-    typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type m_storage;
 };
 
 template<typename T> NeverDestroyed<T> makeNeverDestroyed(T&&);
@@ -87,7 +85,7 @@ template<typename T> NeverDestroyed<T> makeNeverDestroyed(T&&);
 // share more of the code with the main NeverDestroyed above.
 template<typename T> class LazyNeverDestroyed {
     WTF_MAKE_NONCOPYABLE(LazyNeverDestroyed);
-    WTF_FORBID_HEAP_ALLOCATION;
+
 public:
     LazyNeverDestroyed() = default;
 
@@ -126,6 +124,10 @@ private:
         return const_cast<PointerType>(reinterpret_cast<const T*>(&m_storage));
     }
 
+    // FIXME: Investigate whether we should allocate a hunk of virtual memory
+    // and hand out chunks of it to NeverDestroyed instead, to reduce fragmentation.
+    typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type m_storage;
+
     template<typename PtrType, bool ShouldRelax = std::is_base_of<RefCountedBase, PtrType>::value> struct MaybeRelax {
         explicit MaybeRelax(PtrType*) { }
     };
@@ -138,10 +140,6 @@ private:
     // It must not be initialized dynamically; that would not be thread safe.
     bool m_isConstructed;
 #endif
-
-    // FIXME: Investigate whether we should allocate a hunk of virtual memory
-    // and hand out chunks of it to NeverDestroyed instead, to reduce fragmentation.
-    typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type m_storage;
 };
 
 template<typename T> inline NeverDestroyed<T> makeNeverDestroyed(T&& argument)