On Fri, Sep 23 2016, David Bremner <david@tethera.net> wrote: > This is needed so that when the map is modified during traversal, and > thus unlinked by the database code, the map is not disposed of until the > iterator is done with it. > --- > > According to my obviously fallible memory, this was always intended to > work something like this. For me, this change fixes the test failures > in T610 on Debian stable. The same bad behaviour is visible by running > T610/test6 under valgrind even in places where the test passes. For me the test pass on Scientific Linux 6.2, Ubuntu 16.04 and Fedora 24. I tried to run this under valgrind ( ./T610-message-property.sh --valgrind ) but got so noisy output that I could not resolve anything definite from it. Also /T600-named-queries.sh --val printed noisy output -- but perhaps the noise difference (less there) can inform something. Anyway, this seems to fix a bug that might affect someone, and at least the situation is better with this so this should be pushed soon... Btw: does 'Debian stable' refer to Debian 8.6(+) -- just for the record anyone reading this message years from now :D > lib/string-map.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/string-map.c b/lib/string-map.c > index 591ff6d..0bb77e9 100644 > --- a/lib/string-map.c > +++ b/lib/string-map.c > @@ -170,6 +170,9 @@ _notmuch_string_map_iterator_create (notmuch_string_map_t *map, const char *key, > if (unlikely (iter == NULL)) > return NULL; > > + if (unlikely (talloc_reference (iter, map) == NULL)) > + return NULL; > + > iter->key = talloc_strdup (iter, key); > iter->exact = exact; > iter->current = bsearch_first (map->pairs, map->length, key, exact); > -- > 2.1.4