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