Title: [91721] trunk/Source/WebCore
Revision
91721
Author
[email protected]
Date
2011-07-25 16:28:39 -0700 (Mon, 25 Jul 2011)

Log Message

Fix leveldb crash when compacting during destruction
https://bugs.webkit.org/show_bug.cgi?id=64494

Patch by David Grogan <[email protected]> on 2011-07-25
Reviewed by Nate Chapin.

Only tested manually so far by following the repro instructions at
crbug.com/88944

* platform/leveldb/LevelDBDatabase.cpp:
(WebCore::LevelDBDatabase::~LevelDBDatabase):
* storage/IDBLevelDBBackingStore.cpp:
(WebCore::IDBLevelDBBackingStore::~IDBLevelDBBackingStore):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (91720 => 91721)


--- trunk/Source/WebCore/ChangeLog	2011-07-25 23:27:28 UTC (rev 91720)
+++ trunk/Source/WebCore/ChangeLog	2011-07-25 23:28:39 UTC (rev 91721)
@@ -1,3 +1,18 @@
+2011-07-25  David Grogan  <[email protected]>
+
+        Fix leveldb crash when compacting during destruction
+        https://bugs.webkit.org/show_bug.cgi?id=64494
+
+        Reviewed by Nate Chapin.
+
+        Only tested manually so far by following the repro instructions at
+        crbug.com/88944
+
+        * platform/leveldb/LevelDBDatabase.cpp:
+        (WebCore::LevelDBDatabase::~LevelDBDatabase):
+        * storage/IDBLevelDBBackingStore.cpp:
+        (WebCore::IDBLevelDBBackingStore::~IDBLevelDBBackingStore):
+
 2011-07-25  David Reveman  <[email protected]>
 
         [Chromium] Use correct vertex shader when rendering video layer.

Modified: trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.cpp (91720 => 91721)


--- trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.cpp	2011-07-25 23:27:28 UTC (rev 91720)
+++ trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.cpp	2011-07-25 23:28:39 UTC (rev 91721)
@@ -93,6 +93,9 @@
 
 LevelDBDatabase::~LevelDBDatabase()
 {
+    // m_db's destructor uses m_comparatorAdapter; order of deletion is important.
+    m_db.clear();
+    m_comparatorAdapter.clear();
 }
 
 PassOwnPtr<LevelDBDatabase> LevelDBDatabase::open(const String& fileName, const LevelDBComparator* comparator)

Modified: trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp (91720 => 91721)


--- trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp	2011-07-25 23:27:28 UTC (rev 91720)
+++ trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp	2011-07-25 23:28:39 UTC (rev 91721)
@@ -126,6 +126,10 @@
 IDBLevelDBBackingStore::~IDBLevelDBBackingStore()
 {
     m_factory->removeIDBBackingStore(m_identifier);
+
+    // m_db's destructor uses m_comparator. The order of destruction is important.
+    m_db.clear();
+    m_comparator.clear();
 }
 
 PassRefPtr<IDBBackingStore> IDBLevelDBBackingStore::open(SecurityOrigin* securityOrigin, const String& pathBaseArg, int64_t maximumSize, const String& fileIdentifier, IDBFactoryBackendImpl* factory)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to