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.
notmuch_thread_t *thread;
notmuch_message_t *seed_message;
const char *thread_id;
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;
notmuch_query_t *thread_id_query;
notmuch_messages_t *messages;
if (unlikely (thread_id_query == NULL))
return NULL;
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;
thread = talloc (ctx, notmuch_thread_t);
if (unlikely (thread == NULL))
return NULL;
-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)
notmuch_query_t *query,
notmuch_sort_t sort,
output_t output)
thread = notmuch_threads_get (threads);
if (output == OUTPUT_THREADS) {
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);
notmuch_thread_get_thread_id (thread));
} else { /* output == OUTPUT_SUMMARY */
fputs (format->item_start, stdout);
else
date = notmuch_thread_get_newest_date (thread);
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),
notmuch_thread_get_thread_id (thread),
date,
notmuch_thread_get_matched_messages (thread),
-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)
{
notmuch_query_t *query,
output_t output)
{
fputs (format->item_sep, stdout);
if (output == OUTPUT_FILES) {
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 */
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));
}
notmuch_message_get_message_id (message));
}
-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)
{
const search_format_t *format,
notmuch_query_t *query)
{
else
fputs (format->item_sep, stdout);
else
fputs (format->item_sep, stdout);
- format->item_id (ctx, "", tag);
+ format->item_id (tags, "", tag);
if (notmuch == NULL)
return 1;
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;
if (query_str == NULL) {
fprintf (stderr, "Out of memory.\n");
return 1;
default:
case OUTPUT_SUMMARY:
case OUTPUT_THREADS:
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:
break;
case OUTPUT_MESSAGES:
case OUTPUT_FILES:
- ret = do_search_messages (ctx, format, query, output);
+ ret = do_search_messages (format, query, output);
- ret = do_search_tags (ctx, notmuch, format, query);
+ ret = do_search_tags (notmuch, format, query);
command_t *command;
unsigned int i;
command_t *command;
unsigned int i;
+ talloc_enable_null_tracking ();
+
local = talloc_new (NULL);
g_mime_init (0);
local = talloc_new (NULL);
g_mime_init (0);