diff options
author | Carl Worth <cworth@cworth.org> | 2009-10-26 14:02:58 -0700 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2009-10-26 14:02:58 -0700 |
commit | 1726c5c814aecd924849a0b91c82d420af945827 (patch) | |
tree | 950f730d857153fc6f15b1f5ab2a7795fcdac69c /query.cc | |
parent | 3dce2007887717ec4ec0a1e815591c957acd1ba1 (diff) |
Fix memory leak in notmuch_thread_results_t
If we were using a talloc-based resizing array then this wouldn't
have happened. Of course, thanks to valgrind for catching this.
Diffstat (limited to 'query.cc')
-rw-r--r-- | query.cc | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -158,6 +158,18 @@ notmuch_query_search_messages (notmuch_query_t *query) return results; } +/* Glib objects force use to use a talloc destructor as well, (but not + * nearly as ugly as the for message_results due to C++ objects). At + * this point, I'd really like to have some talloc-friendly + * equivalents for the few pieces of glib that I'm using. */ +static int +_notmuch_thread_results_destructor (notmuch_thread_results_t *results) +{ + g_ptr_array_free (results->thread_ids, TRUE); + + return 0; +} + notmuch_thread_results_t * notmuch_query_search_threads (notmuch_query_t *query) { @@ -175,6 +187,8 @@ notmuch_query_search_threads (notmuch_query_t *query) thread_results->thread_ids = g_ptr_array_new (); thread_results->index = 0; + talloc_set_destructor (thread_results, _notmuch_thread_results_destructor); + seen = g_hash_table_new_full (g_str_hash, g_str_equal, free, NULL); @@ -285,6 +299,5 @@ notmuch_thread_results_advance (notmuch_thread_results_t *results) void notmuch_thread_results_destroy (notmuch_thread_results_t *results) { - g_ptr_array_free (results->thread_ids, TRUE); talloc_free (results); } |