aboutsummaryrefslogtreecommitdiffhomepage
path: root/query.cc
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-10-26 14:02:58 -0700
committerGravatar Carl Worth <cworth@cworth.org>2009-10-26 14:02:58 -0700
commit1726c5c814aecd924849a0b91c82d420af945827 (patch)
tree950f730d857153fc6f15b1f5ab2a7795fcdac69c /query.cc
parent3dce2007887717ec4ec0a1e815591c957acd1ba1 (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.cc15
1 files changed, 14 insertions, 1 deletions
diff --git a/query.cc b/query.cc
index 5fee854c..4df2f52f 100644
--- a/query.cc
+++ b/query.cc
@@ -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);
}