[arch-dev-public] [signoff] sqlite3 - 3.7.6.3-1

Andreas Radke a.radke at arcor.de
Thu May 19 15:37:50 EDT 2011


Minor upstream release. Please give signoffs.

-Andy

2011-May-19 - Version 3.7.6.3

    SQLite version 3.7.6.3 is a patch release that fixes a single bug
    associated with WAL mode. The bug has been in SQLite ever since WAL
    was added, but the problem is very obscure and so nobody has
    noticed before now. Nevertheless, all users are encouraged to
    upgrade to version 3.7.6.3 or later.

    The bug is this: If the cache_size is set very small (less than 10)
    and SQLite comes under memory pressure and if a multi-statement
    transaction is started in which the last statement prior to COMMIT
    is a SELECT statement and if a checkpoint occurs right after the
    transaction commit, then it might happen that the transaction will
    be silently rolled back instead of being committed.

    The default setting for cache_size is 2000. So in most situations,
    this bug will never appear. But sometimes programmers set
    cache_size to very small values on gadgets and other low-memory
    devices in order to save memory space. Such applications are
    vulnerable. Note that this bug does not cause database corruption.
    It is as if ROLLBACK were being run instead of COMMIT in some cases.

    Bug Details

    Transactions commit in WAL mode by adding a record onto the end of
    the WAL (the write-ahead log) that contains a "commit" flag. So to
    commit a transaction, SQLite takes all the pages that have changed
    during that transaction, appends them to the WAL, and sets the
    commit flag on the last page. Now, if SQLite comes under memory
    pressure, it might try to free up memory space by writing changed
    pages to the WAL prior to the commit. We call this "spilling" the
    cache to WAL. There is nothing wrong with spilling cache to WAL.
    But if the memory pressure is severe, it might be that by the time
    COMMIT is run, all changed pages for the transaction have already
    been spilled to WAL and there are no pages left to be written to
    WAL. And with no unwritten pages, there was nothing to put the
    commit flag on. And without a commit flag, the transaction would
    end up being rolled back.

    The fix to this problem was that if all changed pages has already
    been written to the WAL when the commit was started, then page 1 of
    the database will be written to the WAL again, so that there will
    always be a page available on which to set the commit flag. 

2011-April-17 - Version 3.7.6.2

    SQLite version 3.7.6.2 adds a one-line bug fix to 3.7.6.1 that
    enables pthreads to work correctly on NetBSD. The problem was a
    faulty function signature for the open system call. The problem
    does not appear to have any adverse impact on any system other than
    NetBSD.

    Upgrading from version 3.7.6.1 is only needed on NetBSD. 


More information about the arch-dev-public mailing list