aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2011-01-25 23:40:35 +1000
committerGravatar Carl Worth <cworth@cworth.org>2011-01-26 15:59:19 +1000
commitb64afb1ab9924749cd6d3fbfa02e5e42bb0d728b (patch)
tree69eb4ee545074944d7171dbca0c709bec0bddf0c
parent38ce0dbf82732590ef836767d3602db48ae345a9 (diff)
notmuch search: Clean up some memory leaks during search loop.
With talloc, we were already freeing all memory by the time we exited the loop, but that didn't help with excess use of memory inside the loop, (which was mostly from tallocing some objects with the incorrect parent). Thanks to Andrew Tridgell for sitting next to me and teaching me to use talloc_report_full to find these leaks.
-rw-r--r--lib/thread.cc4
-rw-r--r--notmuch-search.c27
-rw-r--r--notmuch.c2
3 files changed, 17 insertions, 16 deletions
diff --git a/lib/thread.cc b/lib/thread.cc
index b29f2c92..5190a663 100644
--- a/lib/thread.cc
+++ b/lib/thread.cc
@@ -397,7 +397,7 @@ _notmuch_thread_create (void *ctx,
notmuch_thread_t *thread;
notmuch_message_t *seed_message;
const char *thread_id;
- const char *thread_id_query_string;
+ char *thread_id_query_string;
notmuch_query_t *thread_id_query;
notmuch_messages_t *messages;
@@ -416,6 +416,8 @@ _notmuch_thread_create (void *ctx,
if (unlikely (thread_id_query == NULL))
return NULL;
+ talloc_free (thread_id_query_string);
+
thread = talloc (ctx, notmuch_thread_t);
if (unlikely (thread == NULL))
return NULL;
diff --git a/notmuch-search.c b/notmuch-search.c
index c628b369..a91b2311 100644
--- a/notmuch-search.c
+++ b/notmuch-search.c
@@ -167,8 +167,7 @@ format_thread_json (const void *ctx,
}
static int
-do_search_threads (const void *ctx,
- const search_format_t *format,
+do_search_threads (const search_format_t *format,
notmuch_query_t *query,
notmuch_sort_t sort,
output_t output)
@@ -197,7 +196,7 @@ do_search_threads (const void *ctx,
thread = notmuch_threads_get (threads);
if (output == OUTPUT_THREADS) {
- format->item_id (ctx, "thread:",
+ format->item_id (thread, "thread:",
notmuch_thread_get_thread_id (thread));
} else { /* output == OUTPUT_SUMMARY */
fputs (format->item_start, stdout);
@@ -207,7 +206,7 @@ do_search_threads (const void *ctx,
else
date = notmuch_thread_get_newest_date (thread);
- format->thread_summary (ctx,
+ format->thread_summary (thread,
notmuch_thread_get_thread_id (thread),
date,
notmuch_thread_get_matched_messages (thread),
@@ -244,8 +243,7 @@ do_search_threads (const void *ctx,
}
static int
-do_search_messages (const void *ctx,
- const search_format_t *format,
+do_search_messages (const search_format_t *format,
notmuch_query_t *query,
output_t output)
{
@@ -269,10 +267,10 @@ do_search_messages (const void *ctx,
fputs (format->item_sep, stdout);
if (output == OUTPUT_FILES) {
- format->item_id (ctx, "",
+ format->item_id (message, "",
notmuch_message_get_filename (message));
} else { /* output == OUTPUT_MESSAGES */
- format->item_id (ctx, "id:",
+ format->item_id (message, "id:",
notmuch_message_get_message_id (message));
}
@@ -290,8 +288,7 @@ do_search_messages (const void *ctx,
}
static int
-do_search_tags (const void *ctx,
- notmuch_database_t *notmuch,
+do_search_tags (notmuch_database_t *notmuch,
const search_format_t *format,
notmuch_query_t *query)
{
@@ -324,7 +321,7 @@ do_search_tags (const void *ctx,
else
fputs (format->item_sep, stdout);
- format->item_id (ctx, "", tag);
+ format->item_id (tags, "", tag);
first_tag = 0;
}
@@ -412,7 +409,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
if (notmuch == NULL)
return 1;
- query_str = query_string_from_args (ctx, argc, argv);
+ query_str = query_string_from_args (notmuch, argc, argv);
if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n");
return 1;
@@ -434,14 +431,14 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
default:
case OUTPUT_SUMMARY:
case OUTPUT_THREADS:
- ret = do_search_threads (ctx, format, query, sort, output);
+ ret = do_search_threads (format, query, sort, output);
break;
case OUTPUT_MESSAGES:
case OUTPUT_FILES:
- ret = do_search_messages (ctx, format, query, output);
+ ret = do_search_messages (format, query, output);
break;
case OUTPUT_TAGS:
- ret = do_search_tags (ctx, notmuch, format, query);
+ ret = do_search_tags (notmuch, format, query);
break;
}
diff --git a/notmuch.c b/notmuch.c
index c028aeb9..40da62b6 100644
--- a/notmuch.c
+++ b/notmuch.c
@@ -548,6 +548,8 @@ main (int argc, char *argv[])
command_t *command;
unsigned int i;
+ talloc_enable_null_tracking ();
+
local = talloc_new (NULL);
g_mime_init (0);