Changeset 103429 in webkit


Ignore:
Timestamp:
Dec 21, 2011 12:27:37 PM (12 years ago)
Author:
dslomov@google.com
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:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    • Property svn:executable deleted
    r103427 r103429  
     12011-12-20  Dmitry Lomov  <dslomov@google.com>
     2
     3        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread.
     4        https://bugs.webkit.org/show_bug.cgi?id=74554
     5
     6        Reviewed by David Levin.
     7
     8        * platform/chromium/test_expectations.txt:
     9
    1102011-12-21  Nikolas Zimmermann  <nzimmermann@rim.com>
    211
  • trunk/LayoutTests/platform/chromium/test_expectations.txt

    r103398 r103429  
    182182BUGWK74459 SKIP : fast/workers/worker-multi-port.html = CRASH
    183183
    184 BUGWK74554 SKIP : fast/workers/storage = CRASH TIMEOUT
    185 
    186184BUGWK74449 SKIP : fast/workers/dedicated-worker-lifecycle.html = TIMEOUT
    187185BUGWK74449 SKIP : fast/workers/worker-close-more.html = TIMEOUT
     
    190188BUGWK74466 : fast/workers/worker-script-error.html = PASS TIMEOUT FAIL
    191189
     190// Tests timing out because layoutTestController.workerThreadCount is not implemented in DRT
    192191BUGWK74653 SKIP : http/tests/xmlhttprequest/workers/abort-exception-assert.html = TIMEOUT
     192BUGWK74653 SKIP : http/tests/workers/interrupt-database-sync-open-crash.html = TIMEOUT
     193BUGWK74653 SKIP : fast/workers/storage/interrupt-database.html = TIMEOUT
    193194
    194195BUGWK71968 : fast/files/workers/worker-apply-blob-url-to-xhr.html = TEXT
  • trunk/Source/WebCore/ChangeLog

    r103428 r103429  
     12011-12-20  Dmitry Lomov  <dslomov@google.com>
     2
     3        [Chromium] DatabaseTrackerChromium: iterating DatabaseSet races with Database disposal on worker thread
     4        https://bugs.webkit.org/show_bug.cgi?id=74554
     5
     6        Reviewed by David Levin.
     7
     8        Covered by existing tests in fast/workers/storage.
     9
     10        * storage/chromium/DatabaseTrackerChromium.cpp:
     11        (WebCore::NotifyDatabaseObserverOnCloseTask::create):
     12        (WebCore::NotifyDatabaseObserverOnCloseTask::performTask):
     13        (WebCore::NotifyDatabaseObserverOnCloseTask::isCleanupTask):
     14        (WebCore::NotifyDatabaseObserverOnCloseTask::NotifyDatabaseObserverOnCloseTask):
     15        (WebCore::DatabaseTracker::removeOpenDatabase):
     16
    1172011-12-21  Eric Carlson  <eric.carlson@apple.com>
    218
  • trunk/Source/WebCore/storage/AbstractDatabase.cpp

    r101492 r103429  
    224224AbstractDatabase::~AbstractDatabase()
    225225{
     226    ASSERT(!m_opened);
    226227}
    227228
  • trunk/Source/WebCore/storage/chromium/DatabaseTrackerChromium.cpp

    r97546 r103429  
    9898}
    9999
    100 class TrackerRemoveOpenDatabaseTask : public ScriptExecutionContext::Task {
     100class NotifyDatabaseObserverOnCloseTask : public ScriptExecutionContext::Task {
    101101public:
    102     static PassOwnPtr<TrackerRemoveOpenDatabaseTask> create(PassRefPtr<AbstractDatabase> database)
    103     {
    104         return adoptPtr(new TrackerRemoveOpenDatabaseTask(database));
     102    static PassOwnPtr<NotifyDatabaseObserverOnCloseTask> create(PassRefPtr<AbstractDatabase> database)
     103    {
     104        return adoptPtr(new NotifyDatabaseObserverOnCloseTask(database));
    105105    }
    106106
    107107    virtual void performTask(ScriptExecutionContext* context)
    108108    {
    109         DatabaseTracker::tracker().removeOpenDatabase(m_database.get());
     109        DatabaseObserver::databaseClosed(m_database.get());
     110    }
     111
     112    virtual bool isCleanupTask() const
     113    {
     114        return true;
    110115    }
    111116
    112117private:
    113     TrackerRemoveOpenDatabaseTask(PassRefPtr<AbstractDatabase> database)
     118    NotifyDatabaseObserverOnCloseTask(PassRefPtr<AbstractDatabase> database)
    114119        : m_database(database)
    115120    {
     
    121126void DatabaseTracker::removeOpenDatabase(AbstractDatabase* database)
    122127{
    123     if (!database->scriptExecutionContext()->isContextThread()) {
    124         database->scriptExecutionContext()->postTask(TrackerRemoveOpenDatabaseTask::create(database));
    125         return;
    126     }
    127 
    128128    String originIdentifier = database->securityOrigin()->databaseIdentifier();
    129129    MutexLocker openDatabaseMapLock(m_openDatabaseMapGuard);
     
    152152    }
    153153
    154     DatabaseObserver::databaseClosed(database);
     154    if (!database->scriptExecutionContext()->isContextThread())
     155        database->scriptExecutionContext()->postTask(NotifyDatabaseObserverOnCloseTask::create(database));
     156    else
     157        DatabaseObserver::databaseClosed(database);
    155158}
    156159
Note: See TracChangeset for help on using the changeset viewer.