From: David Bremner <david@tethera.net>
To: Floris Bruynooghe <flub@devork.be>, notmuch@notmuchmail.org
Subject: Re: [PATCH 2/4] lib: catch error from closed db in n_m_get_message_id
Date: Sat, 04 Jul 2020 14:17:09 -0300 [thread overview]
Message-ID: <87eeprkxnu.fsf@tethera.net> (raw)
In-Reply-To: <87h7unxp1j.fsf@powell.devork.be>
Floris Bruynooghe <flub@devork.be> writes:
>> - * This function will not return NULL since Notmuch ensures that every
>> - * message has a unique message ID, (Notmuch will generate an ID for a
>> - * message if the original file does not contain one).
>> + * This function will return NULL if triggers an unhandled Xapian
>> + * exception.
> How much of a departure from the existing API is this? Will this be
> possible with all functions? I had a quick look and tried some other
> functions that don't return notmuch_status_t:
It's upward compatible in that any code which crashes because it was not
expecting a NULL pointer, will already be crashing in the same
circumstances because of an uncaught exception / call to abort.
> notmuch_database_get_version currently returns and unsigned int and
> segfaults on use with a closed db.
Yes, the ones without a proper status value are going to be a bit work.
In the next series I just posted [1], I started providing status value
returning version (see notmuch_message_get_flag_st). We've been through
a few of these migrations and it has not been too painful.
> I wonder if a backwards-compatible errno-style API could work,
> notmuch_last_status(notmuch_database_t* database) or so. This kind of
> thing is probably easy to adopt in bindings but harder for direct users
> of the API. It's also an extra API call for everything that doesn't
> return notmuch_status_t. But I'll leave the judgement to you, I'm not
> as experienced with the API.
I think my main objection to this is that there is no out-of-band value
to tell the caller they need to check errno. So basically every call to
to one of the relevant functions would need be followed by a call to
checking the error number. I don't think that's less work than switching
to a new API. Of course it's less work for me, and we already sort of
made that choice with notmuch_database_status_string. In that case it
was a matter of changing the entire API. Here we're talking about 10
functions, and I'm not sure if they all need to be changed. For example
several of the notmuch_foo_valid functions just check pointers for being
NULL and can't generate I/O or exceptions.
d
[1]: id:20200704151805.3717715-1-david@tethera.net
next prev parent reply other threads:[~2020-07-04 17:17 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-30 1:14 introduce exception handling at top level of libnotmuch David Bremner
2020-06-30 1:14 ` [PATCH 1/4] test: add known broken test for error handling on closed database David Bremner
2020-06-30 1:14 ` [PATCH 2/4] lib: catch error from closed db in n_m_get_message_id David Bremner
2020-07-04 15:44 ` Floris Bruynooghe
2020-07-04 17:17 ` David Bremner [this message]
2020-07-05 11:17 ` David Bremner
2020-07-08 19:55 ` Floris Bruynooghe
2020-07-08 19:52 ` Floris Bruynooghe
2020-06-30 1:14 ` [PATCH 3/4] test: add known broken test for n_m_get_thread_id on closed db David Bremner
2020-06-30 1:14 ` [PATCH 4/4] lib/message: catch exception in n_m_get_thread_id David Bremner
2020-07-02 19:16 ` introduce exception handling at top level of libnotmuch Daniel Kahn Gillmor
2020-07-04 0:15 ` David Bremner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87eeprkxnu.fsf@tethera.net \
--to=david@tethera.net \
--cc=flub@devork.be \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).