Changeset 50867 in webkit


Ignore:
Timestamp:
Nov 11, 2009 9:58:28 PM (14 years ago)
Author:
dumi@chromium.org
Message:

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:
Location:
trunk/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r50865 r50867  
     12009-11-09  Dumitru Daniliuc  <dumi@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Fixing Chromium's POSIX VFS implementation, by adding the required
     6        "used file descriptors" logic.
     7
     8        https://bugs.webkit.org/show_bug.cgi?id=31275
     9
     10        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
     11
    1122009-11-11  Chris Fleizach  <cfleizach@apple.com>
    213
  • trunk/WebCore/platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp

    r48845 r50867  
    4343// Defined in Chromium's codebase in third_party/sqlite/src/os_unix.c
    4444extern "C" {
    45 void initUnixFile(sqlite3_file* file);
    46 int fillInUnixFile(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock);
     45void chromium_sqlite3_initialize_unix_sqlite3_file(sqlite3_file* file);
     46int chromium_sqlite3_fill_in_unix_sqlite3_file(sqlite3_vfs* vfs, int fd, int dirfd, sqlite3_file* file, const char* fileName, int noLock);
     47int chromium_sqlite3_get_reusable_file_handle(sqlite3_file* file, const char* fileName, int flags, int* fd);
     48void chromium_sqlite3_update_reusable_file_handle(sqlite3_file* file, int fd, int flags);
     49void chromium_sqlite3_destroy_reusable_file_handle(sqlite3_file* file);
    4750}
    4851
     
    6063                 sqlite3_file* id, int desiredFlags, int* usedFlags)
    6164{
    62     initUnixFile(id);
     65    chromium_sqlite3_initialize_unix_sqlite3_file(id);
     66    int fd = -1;
    6367    int dirfd = -1;
    64     int fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd);
     68    int result = chromium_sqlite3_get_reusable_file_handle(id, fileName, desiredFlags, &fd);
     69    if (result != SQLITE_OK)
     70        return result;
     71
    6572    if (fd < 0) {
    66         if (desiredFlags & SQLITE_OPEN_READWRITE) {
     73        fd = ChromiumBridge::databaseOpenFile(fileName, desiredFlags, &dirfd);
     74        if ((fd < 0) && (desiredFlags & SQLITE_OPEN_READWRITE)) {
    6775            int newFlags = (desiredFlags & ~(SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)) | SQLITE_OPEN_READONLY;
    68             return chromiumOpen(vfs, fileName, id, newFlags, usedFlags);
    69         } else
    70             return SQLITE_CANTOPEN;
    71     }
     76            fd = ChromiumBridge::databaseOpenFile(fileName, newFlags, &dirfd);
     77        }
     78    }
     79    if (fd < 0) {
     80        chromium_sqlite3_destroy_reusable_file_handle(id);
     81        return SQLITE_CANTOPEN;
     82    }
     83
    7284    if (usedFlags)
    7385        *usedFlags = desiredFlags;
     86    chromium_sqlite3_update_reusable_file_handle(id, fd, desiredFlags);
    7487
    7588    fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC);
     
    8093    int fileType = desiredFlags & 0x00007F00;
    8194    int noLock = (fileType != SQLITE_OPEN_MAIN_DB);
    82     return fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock);
     95    result = fillInUnixFile(vfs, fd, dirfd, id, fileName, noLock);
     96    if (result != SQLITE_OK)
     97        chromium_sqlite3_destroy_reusable_file_handle(id);
     98    return result;
    8399}
    84100
Note: See TracChangeset for help on using the changeset viewer.