⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 244131 in webkit


Ignore:
Timestamp:
Apr 10, 2019, 10:11:26 AM (7 years ago)
Author:
Alan Coon
Message:

Apply patch. rdar://problem/49725709

Location:
branches/safari-607-branch/Source
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp

    r239427 r244131  
    8181}
    8282
     83bool DatabaseTracker::isInitialized()
     84{
     85    return !!staticTracker;
     86}
     87   
    8388DatabaseTracker& DatabaseTracker::singleton()
    8489{
  • branches/safari-607-branch/Source/WebCore/Modules/webdatabase/DatabaseTracker.h

    r237266 r244131  
    6060
    6161    WEBCORE_EXPORT static DatabaseTracker& singleton();
     62    WEBCORE_EXPORT static bool isInitialized();
    6263    // This singleton will potentially be used from multiple worker threads and the page's context thread simultaneously.  To keep this safe, it's
    6364    // currently using 4 locks.  In order to avoid deadlock when taking multiple locks, you must take them in the correct order:
  • branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.cpp

    r243585 r244131  
    7272}
    7373
     74static bool isDatabaseOpeningForbidden = false;
     75static Lock isDatabaseOpeningForbiddenMutex;
     76
     77void SQLiteDatabase::setIsDatabaseOpeningForbidden(bool isForbidden)
     78{
     79    std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex);
     80    isDatabaseOpeningForbidden = isForbidden;
     81}
     82
    7483SQLiteDatabase::SQLiteDatabase() = default;
    7584
     
    8594    close();
    8695
    87     m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase);
    88     if (m_openError != SQLITE_OK) {
    89         m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null";
    90         LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(),
    91             m_openErrorMessage.data());
    92         sqlite3_close(m_db);
    93         m_db = 0;
    94         return false;
     96    {
     97        std::lock_guard<Lock> lock(isDatabaseOpeningForbiddenMutex);
     98        m_openError = SQLiteFileSystem::openDatabase(filename, &m_db, forWebSQLDatabase);
     99        if (m_openError != SQLITE_OK) {
     100            m_openErrorMessage = m_db ? sqlite3_errmsg(m_db) : "sqlite_open returned null";
     101            LOG_ERROR("SQLite database failed to load from %s\nCause - %s", filename.ascii().data(),
     102                m_openErrorMessage.data());
     103            sqlite3_close(m_db);
     104            m_db = 0;
     105            return false;
     106        }
    95107    }
    96108
  • branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabase.h

    r237266 r244131  
    137137#endif
    138138
     139    WEBCORE_EXPORT static void setIsDatabaseOpeningForbidden(bool);
     140
    139141private:
    140142    static int authorizerFunction(void*, int, const char*, const char*, const char*, const char*);
  • branches/safari-607-branch/Source/WebCore/platform/sql/SQLiteDatabaseTracker.cpp

    r230303 r244131  
    4141void setClient(SQLiteDatabaseTrackerClient* client)
    4242{
    43     ASSERT(client);
    44     ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client);
     43    std::lock_guard<Lock> lock(transactionInProgressMutex);
    4544    s_staticSQLiteDatabaseTrackerClient = client;
    4645}
     
    4847void incrementTransactionInProgressCount()
    4948{
     49    std::lock_guard<Lock> lock(transactionInProgressMutex);
    5050    if (!s_staticSQLiteDatabaseTrackerClient)
    5151        return;
    52 
    53     std::lock_guard<Lock> lock(transactionInProgressMutex);
    5452
    5553    s_transactionInProgressCounter++;
     
    6058void decrementTransactionInProgressCount()
    6159{
     60    std::lock_guard<Lock> lock(transactionInProgressMutex);
    6261    if (!s_staticSQLiteDatabaseTrackerClient)
    6362        return;
    64 
    65     std::lock_guard<Lock> lock(transactionInProgressMutex);
    6663
    6764    ASSERT(s_transactionInProgressCounter);
     
    7572bool hasTransactionInProgress()
    7673{
     74    std::lock_guard<Lock> lock(transactionInProgressMutex);
    7775    return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0;
    7876}
  • branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.cpp

    r242888 r244131  
    5353}
    5454
     55WebSQLiteDatabaseTracker::~WebSQLiteDatabaseTracker()
     56{
     57    ASSERT(RunLoop::isMain());
     58    SQLiteDatabaseTracker::setClient(nullptr);
     59
     60    if (m_hysteresis.state() == PAL::HysteresisState::Started)
     61        hysteresisUpdated(PAL::HysteresisState::Stopped);
     62}
     63
    5564void WebSQLiteDatabaseTracker::willBeginFirstTransaction()
    5665{
  • branches/safari-607-branch/Source/WebKit/Shared/WebSQLiteDatabaseTracker.h

    r222619 r244131  
    4343    explicit WebSQLiteDatabaseTracker(WebProcess&);
    4444
     45    ~WebSQLiteDatabaseTracker();
     46
    4547    // WebCore::SQLiteDatabaseTrackerClient
    4648    void willBeginFirstTransaction() override;
  • branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.cpp

    r242888 r244131  
    137137#endif
    138138
     139#if PLATFORM(IOS_FAMILY)
     140#include "WebSQLiteDatabaseTracker.h"
     141#endif
     142
    139143#if ENABLE(SEC_ITEM_SHIM)
    140144#include "SecItemShim.h"
     
    184188    , m_nonVisibleProcessCleanupTimer(*this, &WebProcess::nonVisibleProcessCleanupTimerFired)
    185189#if PLATFORM(IOS_FAMILY)
    186     , m_webSQLiteDatabaseTracker(*this)
     190    , m_webSQLiteDatabaseTracker(std::make_unique<WebSQLiteDatabaseTracker>(*this))
    187191#endif
    188192{
     
    14481452
    14491453#if PLATFORM(IOS_FAMILY)
     1454    m_webSQLiteDatabaseTracker = nullptr;
     1455    SQLiteDatabase::setIsDatabaseOpeningForbidden(true);
     1456    if (DatabaseTracker::isInitialized())
     1457        DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);
    14501458    accessibilityProcessSuspendedNotification(true);
    14511459#endif
     
    14751483
    14761484    RELEASE_LOG(ProcessSuspension, "%p - WebProcess::processWillSuspendImminently()", this);
    1477     DatabaseTracker::singleton().closeAllDatabases(CurrentQueryBehavior::Interrupt);
    14781485    actualPrepareToSuspend(ShouldAcknowledgeWhenReadyToSuspend::No);
    14791486    handled = true;
     
    14921499
    14931500#if PLATFORM(IOS_FAMILY)
     1501    m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);
     1502    SQLiteDatabase::setIsDatabaseOpeningForbidden(false);
    14941503    accessibilityProcessSuspendedNotification(false);
    14951504#endif
     
    15591568   
    15601569#if PLATFORM(IOS_FAMILY)
     1570    m_webSQLiteDatabaseTracker = std::make_unique<WebSQLiteDatabaseTracker>(*this);
     1571    SQLiteDatabase::setIsDatabaseOpeningForbidden(false);
    15611572    accessibilityProcessSuspendedNotification(false);
    15621573#endif
  • branches/safari-607-branch/Source/WebKit/WebProcess/WebProcess.h

    r242888 r244131  
    5353#endif
    5454
    55 #if PLATFORM(IOS_FAMILY)
    56 #include "WebSQLiteDatabaseTracker.h"
    57 #endif
    58 
    5955namespace API {
    6056class Object;
     
    107103struct WebPageGroupData;
    108104struct WebPreferencesStore;
     105class WebSQLiteDatabaseTracker
    109106struct WebProcessCreationParameters;
    110107struct WebsiteData;
     
    468465
    469466#if PLATFORM(IOS_FAMILY)
    470     WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
     467    std::unique_ptr<WebSQLiteDatabaseTracker> m_webSQLiteDatabaseTracker;
    471468#endif
    472469
Note: See TracChangeset for help on using the changeset viewer.