aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-11-22 03:54:20 +0100
committerCarl Worth <cworth@cworth.org>2009-11-22 03:54:20 +0100
commite2341cbc09b503f996fd46b68f9d96ae6004025b (patch)
tree042bd073a0e34344025cf376453350793326599b
parent717279fbcf7e057957c7c6726cd4930393cd5fdf (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.
-rw-r--r--lib/database-private.h1
-rw-r--r--lib/database.cc14
-rw-r--r--lib/message.cc1
-rw-r--r--lib/query.cc1
4 files changed, 15 insertions, 2 deletions
diff --git a/lib/database-private.h b/lib/database-private.h
index 79c7916..5f178f3 100644
--- a/lib/database-private.h
+++ b/lib/database-private.h
@@ -26,6 +26,7 @@
#include <xapian.h>
struct _notmuch_database {
+ notmuch_bool_t exception_reported;
char *path;
notmuch_database_mode_t mode;
Xapian::Database *xapian_db;
diff --git a/lib/database.cc b/lib/database.cc
index f3cac91..bcea88b 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;
}
diff --git a/lib/message.cc b/lib/message.cc
index 4a5fae1..017c47b 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -201,6 +201,7 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
} catch (const Xapian::Error &error) {
fprintf (stderr, "A Xapian exception occurred creating message: %s\n",
error.get_msg().c_str());
+ notmuch->exception_reported = TRUE;
*status_ret = NOTMUCH_PRIVATE_STATUS_XAPIAN_EXCEPTION;
return NULL;
}
diff --git a/lib/query.cc b/lib/query.cc
index 4a68683..8616735 100644
--- a/lib/query.cc
+++ b/lib/query.cc
@@ -152,6 +152,7 @@ notmuch_query_search_messages (notmuch_query_t *query,
fprintf (stderr, "A Xapian exception occurred performing query: %s\n",
error.get_msg().c_str());
fprintf (stderr, "Query string was: %s\n", query->query_string);
+ notmuch->exception_reported = TRUE;
}
return _notmuch_messages_create (message_list);