mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
Fix more memory leaks.
These were more significant than the previous leak because these were in the loop and leaking memory for every message being parsed. It turns out that g_hash_table_new should probably be named g_hash_table_new_and_leak_memory_please. The actually useful function is g_hash_table_new_full which lets us pass a free function, (to free keys when inserting duplicates into the hash table). And after all, weeding out duplicates is the only reason we are using this hash table in the first place. It almost goes without saying, valgrind found these leaks.
This commit is contained in:
parent
28c0691ab9
commit
9c3807e688
1 changed files with 9 additions and 1 deletions
|
@ -411,7 +411,8 @@ find_thread_ids (Xapian::Database db,
|
|||
const char *parent_message_id;
|
||||
GPtrArray *result;
|
||||
|
||||
thread_ids = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
thread_ids = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||
free, NULL);
|
||||
|
||||
find_messages_by_term (db, "ref", message_id, &child, &children_end);
|
||||
for ( ; child != children_end; child++) {
|
||||
|
@ -432,6 +433,13 @@ find_thread_ids (Xapian::Database db,
|
|||
char *id = (char *) l->data;
|
||||
g_ptr_array_add (result, id);
|
||||
}
|
||||
g_list_free (keys);
|
||||
|
||||
/* We're done with the hash table, but we've taken the pointers to
|
||||
* the allocated strings and put them into our result array, so
|
||||
* tell the hash not to free them on its way out. */
|
||||
g_hash_table_steal_all (thread_ids);
|
||||
g_hash_table_unref (thread_ids);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue