From 090014a33e0d276b5d869be0e90c508be4cb59ee Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Sun, 1 Dec 2013 15:13:59 +0200 Subject: [PATCH] [PATCH 1/2] lib: add return status to database close and destroy --- f0/7c843ed48d594a137d8424549b0e162730d55c | 197 ++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 f0/7c843ed48d594a137d8424549b0e162730d55c diff --git a/f0/7c843ed48d594a137d8424549b0e162730d55c b/f0/7c843ed48d594a137d8424549b0e162730d55c new file mode 100644 index 000000000..1f1e3052b --- /dev/null +++ b/f0/7c843ed48d594a137d8424549b0e162730d55c @@ -0,0 +1,197 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id B2ED9431E64 + for ; Sun, 1 Dec 2013 05:14:17 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" +X-Spam-Flag: NO +X-Spam-Score: -0.7 +X-Spam-Level: +X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id qtChdgI-2GrN for ; + Sun, 1 Dec 2013 05:14:11 -0800 (PST) +Received: from mail-ea0-f173.google.com (mail-ea0-f173.google.com + [209.85.215.173]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id B924A431FD2 + for ; Sun, 1 Dec 2013 05:14:10 -0800 (PST) +Received: by mail-ea0-f173.google.com with SMTP id g15so8110033eak.32 + for ; Sun, 01 Dec 2013 05:14:09 -0800 (PST) +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20130820; + h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to + :references:in-reply-to:references; + bh=2xbixmUduEMNU21MNDaUNJtjM1jmJTHMq8SMNSGFs6k=; + b=bsym/N1zM163VS7HdiApv7nBhxUCzrsfjlClJJl3dEKbbc4ZAttY19gOxGmVvkL+MD + zq/RiitSUaHkUbnmxAwdNlZ5ELcREY1GA9bfFr8COpoNybhmJHon9ZMLhHuCLmQYdhEa + IxRPNSligqHumreF13qGQ0/J+dSvQUpDi7daHAoXJDmQUiWGc0vckbnvbiCVO3QRaoz5 + /nVgxlrjxal7hRMexEoupUbh3LYZpyq+O2CnpW3knHwn2Ef13xEQuYE0Un9W98PSCGr0 + fTdgLs3NjKW8/MgvhNe4kO7l4YXB7ceHanrMJ39moLGKQn4ag53ln7/E7aCRXUChbRnK + KhXQ== +X-Gm-Message-State: + ALoCoQkfpFejya4ordClciAPPdElX83mNjHCKXJlCRcsEjUikWYscNOjFxo+ha80bj2H3zZji2V8 +X-Received: by 10.14.3.130 with SMTP id 2mr27384452eeh.36.1385903649638; + Sun, 01 Dec 2013 05:14:09 -0800 (PST) +Received: from localhost (dsl-hkibrasgw2-58c36f-91.dhcp.inet.fi. + [88.195.111.91]) by mx.google.com with ESMTPSA id + b41sm37212095eef.16.2013.12.01.05.14.07 for + (version=TLSv1.2 cipher=RC4-SHA bits=128/128); + Sun, 01 Dec 2013 05:14:09 -0800 (PST) +From: Jani Nikula +To: notmuch@notmuchmail.org +Subject: [PATCH 1/2] lib: add return status to database close and destroy +Date: Sun, 1 Dec 2013 15:13:59 +0200 +Message-Id: + <29b808bb6bf051fe21b6a72f12bb4ad1badfbf97.1385903109.git.jani@nikula.org> +X-Mailer: git-send-email 1.8.4.2 +In-Reply-To: +References: +In-Reply-To: +References: +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Sun, 01 Dec 2013 13:14:18 -0000 + +notmuch_database_close may fail in Xapian ->flush() or ->close(), so +report the status. Similarly for notmuch_database_destroy which calls +close. + +This is required for notmuch insert to report error status if message +indexing failed. + +Bump the notmuch version to allow clients to conditional build against +both the current release and the next release (current git master). +--- + lib/database.cc | 18 ++++++++++++++---- + lib/notmuch.h | 17 ++++++++++++++--- + 2 files changed, 28 insertions(+), 7 deletions(-) + +diff --git a/lib/database.cc b/lib/database.cc +index f395061..98e2c31 100644 +--- a/lib/database.cc ++++ b/lib/database.cc +@@ -767,14 +767,17 @@ notmuch_database_open (const char *path, + return status; + } + +-void ++notmuch_status_t + notmuch_database_close (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 (notmuch->xapian_db))->flush (); + } catch (const Xapian::Error &error) { ++ status = NOTMUCH_STATUS_XAPIAN_EXCEPTION; + if (! notmuch->exception_reported) { + fprintf (stderr, "Error: A Xapian exception occurred flushing database: %s\n", + error.get_msg().c_str()); +@@ -789,6 +792,7 @@ notmuch_database_close (notmuch_database_t *notmuch) + notmuch->xapian_db->close(); + } catch (const Xapian::Error &error) { + /* do nothing */ ++ status = NOTMUCH_STATUS_XAPIAN_EXCEPTION; + } + } + +@@ -802,6 +806,8 @@ notmuch_database_close (notmuch_database_t *notmuch) + notmuch->value_range_processor = NULL; + delete notmuch->date_range_processor; + notmuch->date_range_processor = NULL; ++ ++ return status; + } + + #if HAVE_XAPIAN_COMPACT +@@ -966,7 +972,7 @@ notmuch_database_compact (const char *path, + + DONE: + if (notmuch) +- notmuch_database_destroy (notmuch); ++ ret = notmuch_database_destroy (notmuch); + + talloc_free (local); + +@@ -984,11 +990,15 @@ notmuch_database_compact (unused (const char *path), + } + #endif + +-void ++notmuch_status_t + notmuch_database_destroy (notmuch_database_t *notmuch) + { +- notmuch_database_close (notmuch); ++ notmuch_status_t status; ++ ++ status = notmuch_database_close (notmuch); + talloc_free (notmuch); ++ ++ return status; + } + + const char * +diff --git a/lib/notmuch.h b/lib/notmuch.h +index 7c3a30c..dbdce86 100644 +--- a/lib/notmuch.h ++++ b/lib/notmuch.h +@@ -42,7 +42,7 @@ NOTMUCH_BEGIN_DECLS + #endif + + #define NOTMUCH_MAJOR_VERSION 0 +-#define NOTMUCH_MINOR_VERSION 17 ++#define NOTMUCH_MINOR_VERSION 18 + #define NOTMUCH_MICRO_VERSION 0 + + /* +@@ -236,8 +236,16 @@ notmuch_database_open (const char *path, + * + * notmuch_database_close can be called multiple times. Later calls + * have no effect. ++ * ++ * Return value: ++ * ++ * NOTMUCH_STATUS_SUCCESS: Successfully closed the database. ++ * ++ * NOTMUCH_STATUS_XAPIAN_EXCEPTION: A Xapian exception occurred; the ++ * database has been closed but there are no guarantees the ++ * changes to the database, if any, have been flushed to disk. + */ +-void ++notmuch_status_t + notmuch_database_close (notmuch_database_t *database); + + /* A callback invoked by notmuch_database_compact to notify the user +@@ -263,8 +271,11 @@ notmuch_database_compact (const char* path, + + /* Destroy the notmuch database, closing it if necessary and freeing + * all associated resources. ++ * ++ * Return value as in notmuch_database_close if the database was open; ++ * notmuch_database_destroy itself has no failure modes. + */ +-void ++notmuch_status_t + notmuch_database_destroy (notmuch_database_t *database); + + /* Return the database path of the given database. +-- +1.8.4.2 + -- 2.26.2