Quoth Jameson Graef Rollins on Aug 19 at 6:52 pm: > Now that we have the infrastructure in place, we modify the thread > object and associated functions to use the new addresses structure for > storing thread authors. > --- > lib/thread.cc | 41 +++++++++++------------------------------ > 1 file changed, 11 insertions(+), 30 deletions(-) > > diff --git a/lib/thread.cc b/lib/thread.cc > index 7af9eeb..9e0e5cb 100644 > --- a/lib/thread.cc > +++ b/lib/thread.cc > @@ -36,11 +36,7 @@ struct visible _notmuch_thread { > notmuch_database_t *notmuch; > char *thread_id; > char *subject; > - GHashTable *authors_hash; > - GPtrArray *authors_array; > - GHashTable *matched_authors_hash; > - GPtrArray *matched_authors_array; > - char *authors; > + notmuch_thread_addresses_t *authors; > GHashTable *tags; > > notmuch_message_list_t *message_list; > @@ -66,21 +62,9 @@ _notmuch_thread_addresses_destructor (notmuch_thread_addresses_t *addresses) > static int > _notmuch_thread_destructor (notmuch_thread_t *thread) > { > - g_hash_table_unref (thread->authors_hash); > - g_hash_table_unref (thread->matched_authors_hash); > + _notmuch_thread_addresses_destructor (thread->authors); This is the explicit call I mentioned in my talloc destructor comment on patch 1. > g_hash_table_unref (thread->tags); > g_hash_table_unref (thread->message_hash); > - > - if (thread->authors_array) { > - g_ptr_array_free (thread->authors_array, TRUE); > - thread->authors_array = NULL; > - } > - > - if (thread->matched_authors_array) { > - g_ptr_array_free (thread->matched_authors_array, TRUE); > - thread->matched_authors_array = NULL; > - } > - > return 0; > } > > @@ -341,7 +325,7 @@ _thread_add_message (notmuch_thread_t *thread, > author = internet_address_mailbox_get_addr (mailbox); > } > clean_author = _thread_cleanup_author (thread, author, from); > - _thread_add_author (thread, clean_author); > + _thread_add_address (thread->authors, clean_author, FALSE); > notmuch_message_set_author (message, clean_author); > } > g_object_unref (G_OBJECT (list)); > @@ -436,7 +420,7 @@ _thread_add_matched_message (notmuch_thread_t *thread, > NOTMUCH_MESSAGE_FLAG_MATCH, 1); > } > > - _thread_add_matched_author (thread, notmuch_message_get_author (hashed_message)); > + _thread_add_address (thread->authors, notmuch_message_get_author (hashed_message), TRUE); > } > > static void > @@ -555,14 +539,11 @@ _notmuch_thread_create (void *ctx, > thread->notmuch = notmuch; > thread->thread_id = talloc_strdup (thread, thread_id); > thread->subject = NULL; > - thread->authors_hash = g_hash_table_new_full (g_str_hash, g_str_equal, > - NULL, NULL); > - thread->authors_array = g_ptr_array_new (); > - thread->matched_authors_hash = g_hash_table_new_full (g_str_hash, > - g_str_equal, > - NULL, NULL); > - thread->matched_authors_array = g_ptr_array_new (); > - thread->authors = NULL; > + > + thread->authors = _thread_addresses_init (thread); > + if (unlikely (thread->authors == NULL)) > + return NULL; > + > thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal, > free, NULL); > > @@ -607,7 +588,7 @@ _notmuch_thread_create (void *ctx, > > notmuch_query_destroy (thread_id_query); > > - _resolve_thread_authors_string (thread); > + _resolve_thread_addresses_string (thread->authors); If you make my suggested change to the _resolve_thread_addresses_string API, this call would simply go away... > > _resolve_thread_relationships (thread); > > @@ -641,7 +622,7 @@ notmuch_thread_get_matched_messages (notmuch_thread_t *thread) > const char * > notmuch_thread_get_authors (notmuch_thread_t *thread) > { > - return thread->authors; > + return thread->authors->string; ... and this would be return _thread_addresses_to_string (or whatever). > } > > const char * -- Austin Clements MIT/'06/PhD/CSAIL amdragon@mit.edu http://web.mit.edu/amdragon Somewhere in the dream we call reality you will find me, searching for the reality we call dreams.