[PATCH] lib: add talloc reference from string map iterator to map

Tomi Ollila tomi.ollila at iki.fi
Sat Sep 24 02:54:48 PDT 2016


On Fri, Sep 23 2016, David Bremner <david at 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


More information about the notmuch mailing list