Title: [103429] trunk
Revision
103429
Author
[email protected]
Date
2011-12-21 12:27:37 -0800 (Wed, 21 Dec 2011)

Log Message

Source/WebCore: [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread
https://bugs.webkit.org/show_bug.cgi?id=74554

Reviewed by David Levin.

Covered by existing tests in fast/workers/storage.

* storage/chromium/DatabaseTrackerChromium.cpp:
(WebCore::NotifyDatabaseObserverOnCloseTask::create):
(WebCore::NotifyDatabaseObserverOnCloseTask::performTask):
(WebCore::NotifyDatabaseObserverOnCloseTask::isCleanupTask):
(WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
(WebCore::DatabaseTracker::removeOpenDatabase):

LayoutTests: [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread.
https://bugs.webkit.org/show_bug.cgi?id=74554

Reviewed by David Levin.

* platform/chromium/test_expectations.txt:

Modified Paths

Property Changed

Diff

Modified: trunk/LayoutTests/ChangeLog (103428 => 103429)


--- trunk/LayoutTests/ChangeLog	2011-12-21 20:09:54 UTC (rev 103428)
+++ trunk/LayoutTests/ChangeLog	2011-12-21 20:27:37 UTC (rev 103429)
@@ -1,3 +1,12 @@
+2011-12-20  Dmitry Lomov  <[email protected]>
+
+        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread.
+        https://bugs.webkit.org/show_bug.cgi?id=74554
+
+        Reviewed by David Levin.
+
+        * platform/chromium/test_expectations.txt:
+
 2011-12-21  Nikolas Zimmermann  <[email protected]>
 
         Not reviewed. Rebaseline pixel test results, which have < 0.011 diffs on my 64bit SL machine.
Property changes on: trunk/LayoutTests/ChangeLog
___________________________________________________________________

Deleted: svn:executable

Modified: trunk/LayoutTests/platform/chromium/test_expectations.txt (103428 => 103429)


--- trunk/LayoutTests/platform/chromium/test_expectations.txt	2011-12-21 20:09:54 UTC (rev 103428)
+++ trunk/LayoutTests/platform/chromium/test_expectations.txt	2011-12-21 20:27:37 UTC (rev 103429)
@@ -181,15 +181,16 @@
 BUGWK74459 SKIP : fast/workers/worker-messageport.html = CRASH
 BUGWK74459 SKIP : fast/workers/worker-multi-port.html = CRASH
 
-BUGWK74554 SKIP : fast/workers/storage = CRASH TIMEOUT
-
 BUGWK74449 SKIP : fast/workers/dedicated-worker-lifecycle.html = TIMEOUT
 BUGWK74449 SKIP : fast/workers/worker-close-more.html = TIMEOUT
 BUGWK74449 SKIP : fast/workers/worker-lifecycle.html = TIMEOUT
 
 BUGWK74466 : fast/workers/worker-script-error.html = PASS TIMEOUT FAIL
 
+// Tests timing out because layoutTestController.workerThreadCount is not implemented in DRT
 BUGWK74653 SKIP : http/tests/xmlhttprequest/workers/abort-exception-assert.html = TIMEOUT
+BUGWK74653 SKIP : http/tests/workers/interrupt-database-sync-open-crash.html = TIMEOUT
+BUGWK74653 SKIP : fast/workers/storage/interrupt-database.html = TIMEOUT
 
 BUGWK71968 : fast/files/workers/worker-apply-blob-url-to-xhr.html = TEXT
 

Modified: trunk/Source/WebCore/ChangeLog (103428 => 103429)


--- trunk/Source/WebCore/ChangeLog	2011-12-21 20:09:54 UTC (rev 103428)
+++ trunk/Source/WebCore/ChangeLog	2011-12-21 20:27:37 UTC (rev 103429)
@@ -1,3 +1,19 @@
+2011-12-20  Dmitry Lomov  <[email protected]>
+
+        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread 
+        https://bugs.webkit.org/show_bug.cgi?id=74554
+
+        Reviewed by David Levin.
+
+        Covered by existing tests in fast/workers/storage.
+
+        * storage/chromium/DatabaseTrackerChromium.cpp:
+        (WebCore::NotifyDatabaseObserverOnCloseTask::create):
+        (WebCore::NotifyDatabaseObserverOnCloseTask::performTask):
+        (WebCore::NotifyDatabaseObserverOnCloseTask::isCleanupTask):
+        (WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
+        (WebCore::DatabaseTracker::removeOpenDatabase):
+
 2011-12-21  Eric Carlson  <[email protected]>
 
         HTMLMediaElement::configureTextTrackDisplay is unnecessary

Modified: trunk/Source/WebCore/storage/AbstractDatabase.cpp (103428 => 103429)


--- trunk/Source/WebCore/storage/AbstractDatabase.cpp	2011-12-21 20:09:54 UTC (rev 103428)
+++ trunk/Source/WebCore/storage/AbstractDatabase.cpp	2011-12-21 20:27:37 UTC (rev 103429)
@@ -223,6 +223,7 @@
 
 AbstractDatabase::~AbstractDatabase()
 {
+    ASSERT(!m_opened);
 }
 
 void AbstractDatabase::closeDatabase()

Modified: trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp (103428 => 103429)


--- trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2011-12-21 20:09:54 UTC (rev 103428)
+++ trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp	2011-12-21 20:27:37 UTC (rev 103429)
@@ -97,20 +97,25 @@
     DatabaseObserver::databaseOpened(database);
 }
 
-class TrackerRemoveOpenDatabaseTask : public ScriptExecutionContext::Task {
+class NotifyDatabaseObserverOnCloseTask : public ScriptExecutionContext::Task {
 public:
-    static PassOwnPtr<TrackerRemoveOpenDatabaseTask> create(PassRefPtr<AbstractDatabase> database)
+    static PassOwnPtr<NotifyDatabaseObserverOnCloseTask> create(PassRefPtr<AbstractDatabase> database)
     {
-        return adoptPtr(new TrackerRemoveOpenDatabaseTask(database));
+        return adoptPtr(new NotifyDatabaseObserverOnCloseTask(database));
     }
 
     virtual void performTask(ScriptExecutionContext* context)
     {
-        DatabaseTracker::tracker().removeOpenDatabase(m_database.get());
+        DatabaseObserver::databaseClosed(m_database.get());
     }
 
+    virtual bool isCleanupTask() const
+    {
+        return true;
+    }
+
 private:
-    TrackerRemoveOpenDatabaseTask(PassRefPtr<AbstractDatabase> database)
+    NotifyDatabaseObserverOnCloseTask(PassRefPtr<AbstractDatabase> database)
         : m_database(database)
     {
     }
@@ -120,11 +125,6 @@
 
 void DatabaseTracker::removeOpenDatabase(AbstractDatabase* database)
 {
-    if (!database->scriptExecutionContext()->isContextThread()) {
-        database->scriptExecutionContext()->postTask(TrackerRemoveOpenDatabaseTask::create(database));
-        return;
-    }
-
     String originIdentifier = database->securityOrigin()->databaseIdentifier();
     MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
     ASSERT(m_openDatabaseMap);
@@ -151,7 +151,10 @@
         }
     }
 
-    DatabaseObserver::databaseClosed(database);
+    if (!database->scriptExecutionContext()->isContextThread())
+        database->scriptExecutionContext()->postTask(NotifyDatabaseObserverOnCloseTask::create(database));
+    else
+        DatabaseObserver::databaseClosed(database);
 }
 
 void DatabaseTracker::getOpenDatabases(SecurityOrigin* origin, const String& name, HashSet<RefPtr<AbstractDatabase> >* databases)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to