aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2018-04-13 22:08:05 -0300
committerDavid Bremner <david@tethera.net>2018-04-20 11:23:31 -0300
commit9293d6da27494d7b607c945c6678bc890749b94f (patch)
tree8909a7c1a43086075ce1c77b99fc13a26ce73920 /lib
parentab55ca8e0a84b8e00e42860fa0025c1ae86b4478 (diff)
lib: break reference loop by choosing arbitrary top level msg
Other parts of notmuch (e.g. notmuch show) expect each thread to contain at least one top level message, and crash if this expectation is not met.
Diffstat (limited to 'lib')
-rw-r--r--lib/thread.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/thread.cc b/lib/thread.cc
index 3561b27f..dbac002f 100644
--- a/lib/thread.cc
+++ b/lib/thread.cc
@@ -397,7 +397,13 @@ _resolve_thread_relationships (notmuch_thread_t *thread)
for (node = thread->message_list->head; node; node = node->next) {
message = node->message;
in_reply_to = _notmuch_message_get_in_reply_to (message);
- if (in_reply_to && strlen (in_reply_to) &&
+ /*
+ * if we reach the end of the list without finding a top-level
+ * message, that means the thread is a cycle (or set of
+ * cycles) and any message can be considered top-level
+ */
+ if ((thread->toplevel_list->head || node->next) &&
+ in_reply_to && strlen (in_reply_to) &&
g_hash_table_lookup_extended (thread->message_hash,
in_reply_to, NULL,
(void **) &parent))