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