Title: [94383] trunk/Source/WebCore
Revision
94383
Author
[email protected]
Date
2011-09-01 19:27:34 -0700 (Thu, 01 Sep 2011)

Log Message

[Chromium] Fix a crashing bug due to raciness around SQL database shutdown.
https://bugs.webkit.org/show_bug.cgi?id=67457

The removeOpenDatabase() method can get called multiple times.
Subsequent calls to it should be harmeless instead of cause a crash.

Reviewed by David Levin.

* storage/chromium/DatabaseTrackerChromium.cpp:
(WebCore::DatabaseTracker::removeOpenDatabase):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (94382 => 94383)


--- trunk/Source/WebCore/ChangeLog	2011-09-02 02:12:28 UTC (rev 94382)
+++ trunk/Source/WebCore/ChangeLog	2011-09-02 02:27:34 UTC (rev 94383)
@@ -1,3 +1,16 @@
+2011-09-01  Michael Nordman  <[email protected]>
+
+        [Chromium] Fix a crashing bug due to raciness around SQL database shutdown.
+        https://bugs.webkit.org/show_bug.cgi?id=67457
+
+        The removeOpenDatabase() method can get called multiple times.
+        Subsequent calls to it should be harmeless instead of cause a crash.
+
+        Reviewed by David Levin.
+
+        * storage/chromium/DatabaseTrackerChromium.cpp:
+        (WebCore::DatabaseTracker::removeOpenDatabase):
+
 2011-09-01  Kent Tamura  <[email protected]>
 
         The filename text color of a file upload control should be inherited.
@@ -186,6 +199,7 @@
 
         * page/DOMWindow.idl:
 
+>>>>>>> .r94382
 2011-09-01  Mark Rowe  <[email protected]>
 
         <rdar://problem/10063411> WebScriptObject.h declares an Objective-C method without a return type.

Modified: trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp (94382 => 94383)


--- trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2011-09-02 02:12:28 UTC (rev 94382)
+++ trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2011-09-02 02:27:34 UTC (rev 94383)
@@ -129,12 +129,19 @@
     MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
     ASSERT(m_openDatabaseMap);
     DatabaseNameMap* nameMap = m_openDatabaseMap->get(originIdentifier);
-    ASSERT(nameMap);
+    if (!nameMap)
+        return;
+
     String name(database->stringIdentifier());
     DatabaseSet* databaseSet = nameMap->get(name);
-    ASSERT(databaseSet);
-    databaseSet->remove(database);
+    if (!databaseSet)
+        return;
 
+    DatabaseSet::iterator found = databaseSet->find(database);
+    if (found == databaseSet->end())
+        return;
+
+    databaseSet->remove(found);
     if (databaseSet->isEmpty()) {
         nameMap->remove(name);
         delete databaseSet;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to