Title: [207070] releases/WebKitGTK/webkit-2.14/Source/WTF
Revision
207070
Author
carlo...@webkit.org
Date
2016-10-11 02:18:15 -0700 (Tue, 11 Oct 2016)

Log Message

Merge r205836 - [WTF] HashTable's rehash is not compatible to Ref<T> and ASan
https://bugs.webkit.org/show_bug.cgi?id=161763

Reviewed by Darin Adler.

Destructors of HashTable's empty values need to be called while ones of deleted values don't.

* wtf/HashTable.h:
(WTF::KeyTraits>::deallocateTable):
* wtf/Ref.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.14/Source/WTF/ChangeLog (207069 => 207070)


--- releases/WebKitGTK/webkit-2.14/Source/WTF/ChangeLog	2016-10-11 08:49:18 UTC (rev 207069)
+++ releases/WebKitGTK/webkit-2.14/Source/WTF/ChangeLog	2016-10-11 09:18:15 UTC (rev 207070)
@@ -1,3 +1,16 @@
+2016-09-12  Yusuke Suzuki  <utatane....@gmail.com>
+
+        [WTF] HashTable's rehash is not compatible to Ref<T> and ASan
+        https://bugs.webkit.org/show_bug.cgi?id=161763
+
+        Reviewed by Darin Adler.
+
+        Destructors of HashTable's empty values need to be called while ones of deleted values don't.
+
+        * wtf/HashTable.h:
+        (WTF::KeyTraits>::deallocateTable):
+        * wtf/Ref.h:
+
 2016-09-09  Mark Lam  <mark....@apple.com>
 
         Gardening: fixing a few JSC test failures.

Modified: releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/HashTable.h (207069 => 207070)


--- releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/HashTable.h	2016-10-11 08:49:18 UTC (rev 207069)
+++ releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/HashTable.h	2016-10-11 09:18:15 UTC (rev 207070)
@@ -1153,7 +1153,7 @@
     void HashTable<Key, Value, Extractor, HashFunctions, Traits, KeyTraits>::deallocateTable(ValueType* table, unsigned size)
     {
         for (unsigned i = 0; i < size; ++i) {
-            if (!isEmptyOrDeletedBucket(table[i]))
+            if (!isDeletedBucket(table[i]))
                 table[i].~ValueType();
         }
         fastFree(table);
@@ -1197,11 +1197,17 @@
 
         Value* newEntry = nullptr;
         for (unsigned i = 0; i != oldTableSize; ++i) {
-            if (isEmptyOrDeletedBucket(oldTable[i])) {
+            if (isDeletedBucket(oldTable[i])) {
                 ASSERT(std::addressof(oldTable[i]) != entry);
                 continue;
             }
 
+            if (isEmptyBucket(oldTable[i])) {
+                ASSERT(std::addressof(oldTable[i]) != entry);
+                oldTable[i].~ValueType();
+                continue;
+            }
+
             Value* reinsertedEntry = reinsert(WTFMove(oldTable[i]));
             oldTable[i].~ValueType();
             if (std::addressof(oldTable[i]) == entry) {

Modified: releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/Ref.h (207069 => 207070)


--- releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/Ref.h	2016-10-11 08:49:18 UTC (rev 207069)
+++ releases/WebKitGTK/webkit-2.14/Source/WTF/wtf/Ref.h	2016-10-11 09:18:15 UTC (rev 207070)
@@ -114,7 +114,7 @@
         return *this;
     }
 
-    // Hash table deleted/empty values, which are only constructed and never copied or destroyed.
+    // Hash table deleted values, which are only constructed and never copied or destroyed.
     Ref(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
     bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
     static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to