diff options
author | Carl Worth <cworth@cworth.org> | 2009-11-22 03:54:20 +0100 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2009-11-22 03:54:20 +0100 |
commit | e2341cbc09b503f996fd46b68f9d96ae6004025b (patch) | |
tree | 042bd073a0e34344025cf376453350793326599b /lib/database.cc | |
parent | 717279fbcf7e057957c7c6726cd4930393cd5fdf (diff) |
Catch and optionally print about exception at database->flush.
If an earlier exception occurred, then it's not unexpected for the
flush to fail as well. So in that case, we'll silently catch the
exception. Otherwise, make some noise about things going wrong at the
time of flush.
Diffstat (limited to 'lib/database.cc')
-rw-r--r-- | lib/database.cc | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/database.cc b/lib/database.cc index f3cac910..bcea88b0 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -480,6 +480,7 @@ notmuch_database_open (const char *path, } notmuch = talloc (NULL, notmuch_database_t); + notmuch->exception_reported = FALSE; notmuch->path = talloc_strdup (notmuch, path); if (notmuch->path[strlen (notmuch->path) - 1] == '/') @@ -530,8 +531,15 @@ notmuch_database_open (const char *path, void notmuch_database_close (notmuch_database_t *notmuch) { - if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE) - (static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db))->flush (); + try { + if (notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE) + (static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db))->flush (); + } catch (const Xapian::Error &error) { + if (! notmuch->exception_reported) { + fprintf (stderr, "Error: A Xapian exception occurred flushing database: %s\n", + error.get_msg().c_str()); + } + } delete notmuch->term_gen; delete notmuch->query_parser; @@ -611,6 +619,7 @@ notmuch_database_set_timestamp (notmuch_database_t *notmuch, } catch (const Xapian::Error &error) { fprintf (stderr, "A Xapian exception occurred setting timestamp: %s.\n", error.get_msg().c_str()); + notmuch->exception_reported = TRUE; ret = NOTMUCH_STATUS_XAPIAN_EXCEPTION; } @@ -985,6 +994,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch, } catch (const Xapian::Error &error) { fprintf (stderr, "A Xapian exception occurred adding message: %s.\n", error.get_description().c_str()); + notmuch->exception_reported = TRUE; ret = NOTMUCH_STATUS_XAPIAN_EXCEPTION; goto DONE; } |