[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

dumi at chromium.org dumi at chromium.org
Wed Apr 7 23:33:11 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 81ca6b930a4b78efb0f49ff276779d02bb3d1982
Author: dumi at chromium.org <dumi at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Nov 12 05:58:28 2009 +0000

    Fixing Chromium's POSIX VFS implementation, by adding the required
    "used file descriptors" logic.
    
    Reviewed by Dimitri Glazkov.
    
    https://bugs.webkit.org/show_bug.cgi?id=31275
    
    * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@50867 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 803b8a5..4f9f3c0 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,14 @@
+2009-11-09  Dumitru Daniliuc  <dumi at chromium.org>
+
+        Reviewed by Dimitri Glazkov.
+
+        Fixing Chromium's POSIX VFS implementation, by adding the required
+        "used file descriptors" logic.
+
+        https://bugs.webkit.org/show_bug.cgi?id=31275
+
+        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
+
 2009-11-11  Chris Fleizach  <cfleizach at apple.com>
 
         Reviewed by Oliver Hunt.
diff --git a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
index 2960a5f..97226cb 100644
--- a/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
+++ b/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp
@@ -42,8 +42,11 @@ using namespace WebCore;
 
 // Defined in Chromium's codebase in third_party/sqlite/src/os_unix.c
 extern "C" {
-void initUnixFile(sqlite3_file* file);
-int fillInUnixFile(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock);
+void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file);
+int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock);
+int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, const char* fileName, int flags, int* fd);
+void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, int fd, int flags);
+void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file);
 }
 
 // Chromium's Posix implementation of SQLite VFS
@@ -59,18 +62,28 @@ namespace {
 int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
                  sqlite3_file* id, int desiredFlags, int* usedFlags)
 {
-    initUnixFile(id);
+    chromium_sqlite3_initialize_unix_sqlite3_file(id);
+    int fd = -1;
     int dirfd = -1;
-    int fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd);
+    int result = chromium_sqlite3_get_reusable_file_handle(id, fileName, desiredFlags, &fd);
+    if (result != SQLITE_OK)
+        return result;
+
     if (fd < 0) {
-        if (desiredFlags & SQLITE_OPEN_READWRITE) {
+        fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd);
+        if ((fd < 0) && (desiredFlags & SQLITE_OPEN_READWRITE)) {
             int newFlags = (desiredFlags & ~(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)) | SQLITE_OPEN_READONLY;
-            return chromiumOpen(vfs, fileName, id, newFlags, usedFlags);
-        } else
-            return SQLITE_CANTOPEN;
+            fd = ChromiumBridge::databaseOpenFile(fileName, newFlags, &dirfd);
+        }
+    }
+    if (fd < 0) {
+        chromium_sqlite3_destroy_reusable_file_handle(id);
+        return SQLITE_CANTOPEN;
     }
+
     if (usedFlags)
         *usedFlags = desiredFlags;
+    chromium_sqlite3_update_reusable_file_handle(id, fd, desiredFlags);
 
     fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
     if (dirfd >= 0)
@@ -79,7 +92,10 @@ int chromiumOpen(sqlite3_vfs* vfs, const char* fileName,
     // The mask 0x00007F00 gives us the 7 bits that determine the type of the file SQLite is trying to open.
     int fileType = desiredFlags & 0x00007F00;
     int noLock = (fileType != SQLITE_OPEN_MAIN_DB);
-    return fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock);
+    result = fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock);
+    if (result != SQLITE_OK)
+        chromium_sqlite3_destroy_reusable_file_handle(id);
+    return result;
 }
 
 // Deletes the given file.

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list