[PATCH 1/2] Add notmuch_database_flush method

Adrien Bustany adrien at bustany.org
Thu Jul 19 11:43:20 PDT 2012


This method explicitly flushes the pending modifications to disk. It is
useful if your program has various threads, each with a read only DB and
one writer thread with a read/write DB. In that case, you most likely
want the writer to sync the changes to disk so that the readers can see
them, without having to close and reopen the database completely.
---
 lib/database.cc |   18 ++++++++++++++++++
 lib/notmuch.h   |    4 ++++
 2 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/lib/database.cc b/lib/database.cc
index 761dc1a..55bcd17 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -745,6 +745,24 @@ notmuch_database_open (const char *path,
     return status;
 }
 
+notmuch_status_t
+notmuch_database_flush(notmuch_database_t *notmuch)
+{
+	notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
+
+	try {
+	if (notmuch->xapian_db != NULL &&
+	    notmuch->mode == NOTMUCH_DATABASE_MODE_READ_WRITE)
+		(static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db))->flush ();
+	} catch (const Xapian::Error &error) {
+	fprintf(stderr, "A Xapian exception occured flushing the database: %s\n",
+	        error.get_msg().c_str());
+	status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
+	}
+
+	return status;
+}
+
 void
 notmuch_database_close (notmuch_database_t *notmuch)
 {
diff --git a/lib/notmuch.h b/lib/notmuch.h
index 3633bed..aef5c56 100644
--- a/lib/notmuch.h
+++ b/lib/notmuch.h
@@ -201,6 +201,10 @@ notmuch_database_open (const char *path,
 		       notmuch_database_mode_t mode,
 		       notmuch_database_t **database);
 
+/* Flushes all the pending modifications to the database to disk. */
+notmuch_status_t
+notmuch_database_flush (notmuch_database_t *database);
+
 /* Close the given notmuch database.
  *
  * After notmuch_database_close has been called, calls to other
-- 
1.7.7.6



More information about the notmuch mailing list