[iOS] The network process sometimes gets killed for trying to suspend while holding...
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Mar 2019 18:27:42 +0000 (18:27 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 18 Mar 2019 18:27:42 +0000 (18:27 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195890
<rdar://problem/48934338>

Reviewed by Geoffrey Garen.

The network process sometimes gets killed for trying to suspend while holding locked files while
under SQLiteDatabase::open(). The SQLiteDatabaseTracker normally keeps tracking of "transactions"
in progress so we know that we're holding locked files and the WebSQLiteDatabaseTracker takes
care of notifying the UIProcess via IPC that it should hold a background assertion on our behalf
to avoid trying to suspend while holding locked files.
However, we were missing a SQLiteTransactionInProgressAutoCounter when trying to execute the
PRAGMA statement.

Note that we have a similar SQLiteTransactionInProgressAutoCounter in SQLiteDatabase::useWALJournalMode()
when executing such PRAGMA statement already.

* platform/sql/SQLiteDatabase.cpp:
(WebCore::SQLiteDatabase::open):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243085 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/sql/SQLiteDatabase.cpp

index 5ac6a2a..429493e 100644 (file)
@@ -1,3 +1,25 @@
+2019-03-18  Chris Dumez  <cdumez@apple.com>
+
+        [iOS] The network process sometimes gets killed for trying to suspend while holding locked files
+        https://bugs.webkit.org/show_bug.cgi?id=195890
+        <rdar://problem/48934338>
+
+        Reviewed by Geoffrey Garen.
+
+        The network process sometimes gets killed for trying to suspend while holding locked files while
+        under SQLiteDatabase::open(). The SQLiteDatabaseTracker normally keeps tracking of "transactions"
+        in progress so we know that we're holding locked files and the WebSQLiteDatabaseTracker takes
+        care of notifying the UIProcess via IPC that it should hold a background assertion on our behalf
+        to avoid trying to suspend while holding locked files.
+        However, we were missing a SQLiteTransactionInProgressAutoCounter when trying to execute the
+        PRAGMA statement.
+
+        Note that we have a similar SQLiteTransactionInProgressAutoCounter in SQLiteDatabase::useWALJournalMode()
+        when executing such PRAGMA statement already.
+
+        * platform/sql/SQLiteDatabase.cpp:
+        (WebCore::SQLiteDatabase::open):
+
 2019-03-18  Ryan Haddad  <ryanhaddad@apple.com>
 
         Unreviewed, rolling out r243037.
index 070d3ae..1ec93b9 100644 (file)
@@ -123,8 +123,11 @@ bool SQLiteDatabase::open(const String& filename, OpenMode openMode)
     else
         m_openErrorMessage = "sqlite_open returned null";
 
-    if (!SQLiteStatement(*this, "PRAGMA temp_store = MEMORY;"_s).executeCommand())
-        LOG_ERROR("SQLite database could not set temp_store to memory");
+    {
+        SQLiteTransactionInProgressAutoCounter transactionCounter;
+        if (!SQLiteStatement(*this, "PRAGMA temp_store = MEMORY;"_s).executeCommand())
+            LOG_ERROR("SQLite database could not set temp_store to memory");
+    }
 
     if (openMode != OpenMode::ReadOnly)
         useWALJournalMode();