On Mon, 09 Oct 2017, Daniel Kahn Gillmor <dkg@fifthhorseman.net> wrote: > On Sat 2017-09-23 19:10:18 +0300, Jani Nikula wrote: >>> --- a/lib/indexopts.c >>> +++ b/lib/indexopts.c >>> @@ -21,9 +21,27 @@ >>> #include "notmuch-private.h" >>> >>> notmuch_indexopts_t * >>> -notmuch_database_get_default_indexopts (notmuch_database_t unused (*db)) >>> +notmuch_database_get_default_indexopts (notmuch_database_t *db) >>> { >>> - return NULL; >>> + return talloc_zero (db, notmuch_indexopts_t); >> >> I wonder about the lifetime of indexopts. Should default indexopts be >> part of the db object, so that your caller above doesn't have to >> alloc/destroy it for every file? > > The caller doesn't have to alloc/destroy it for every file, they can > alloc it once and pass it in for every file. My point was, if the caller doesn't do it, it'll get alloced and destroyed per file. BR, Jani. > > I'd rather not have the indexopts be part of the db object itself > explicitly, because i can imagine a longer-running program wanting to > create two indexopts objects, configuring them differently, and re-using > one or the other without wanting to modify the database itself. > >> Our library interface has a leaky abstraction of the talloc hierarchical >> refcounting. We don't talk about it in any of the docs, some of it is >> implied, most of it is completely surprising if the library interface >> user assumes a traditional C memory allocation model without >> refcounting. > > right, probably the most surprising thing would be if the user got a > default indexopts from one database object, and then tried to apply it > to another database object, after having deleted the first database > object. > > However, we *do* talk about it in the docs now, so i think we've given > fair warning: > > ------------- > /** > * get the current default indexing options for a given database. > * > * This object will survive until the database itself is destroyed, > * but the caller may also release it earlier with > * notmuch_indexopts_destroy. > * > * This object represents a set of options on how a message can be > * added to the index. At the moment it is a featureless stub. > * > * @since libnotmuch 5.1 (notmuch 0.26) > */ > notmuch_indexopts_t * > notmuch_database_get_default_indexopts (notmuch_database_t *db); > ------------- > > --dkg _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch