aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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 79c7916a..5f178f3e 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 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;
}
diff --git a/lib/message.cc b/lib/message.cc
index 4a5fae1e..017c47b2 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 4a686832..86167352 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);