lib: Simplify close and codify aborting atomic section
authorAustin Clements <amdragon@mit.edu>
Thu, 2 Oct 2014 19:19:08 +0000 (15:19 -0400)
committerDavid Bremner <david@tethera.net>
Fri, 3 Oct 2014 06:58:58 +0000 (08:58 +0200)
commitcec601c4dd94d19ce7e27804b6a2adbb9197824d
tree3e8229b040dc824e0c38d3fd0d9fcf396eb23a4c
parent0d597f6889fe29bf94658a1389b38c100154b72f
lib: Simplify close and codify aborting atomic section

In Xapian, closing a database implicitly aborts any outstanding
transaction and commits changes.  For historical reasons,
notmuch_database_close had grown to almost, but not quite duplicate
this behavior.  Before closing the database, it would explicitly (and
unnecessarily) commit it.  However, if there was an outstanding
transaction (ie atomic section), commit would throw a Xapian
exception, which notmuch_database_close would unnecessarily print to
stderr, even though notmuch_database_close would ultimately abort the
transaction anyway when it called close.

This patch simplifies notmuch_database_close to explicitly abort any
outstanding transaction and then just call Database::close.  This
works for both read-only and read/write databases, takes care of
committing changes, unifies the exception handling path, and codifies
aborting outstanding transactions.  This is currently the only way to
abort an atomic section (and may remain so, since it would be
difficult to roll back things we may have cached from rolled-back
modifications).
lib/database.cc
lib/notmuch.h