mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
Bring back the insert_thread_id function.
We deleted this in favor of our fancy new thread_ids iterator from the message object. But one of the previous callers of insert_thread_id isn't using notmuch_message_t yet. I made the mistake of thinking I could just call g_hash_table_insert directly, but the problem was that nobody was splitting up the thread_id string at its commas. So with this, we were inserting bogus comma-separated IDs into the hash table, so thread_id values were ballooning out of control. Should be much better now.
This commit is contained in:
parent
6c5054ebee
commit
c58ee818b5
1 changed files with 24 additions and 9 deletions
33
database.cc
33
database.cc
|
@ -111,6 +111,29 @@ find_message_by_docid (Xapian::Database *db, Xapian::docid docid)
|
|||
return db->get_document (docid);
|
||||
}
|
||||
|
||||
static void
|
||||
insert_thread_id (GHashTable *thread_ids, Xapian::Document doc)
|
||||
{
|
||||
string value_string;
|
||||
const char *value, *id, *comma;
|
||||
|
||||
value_string = doc.get_value (NOTMUCH_VALUE_THREAD);
|
||||
value = value_string.c_str();
|
||||
if (strlen (value)) {
|
||||
id = value;
|
||||
while (*id) {
|
||||
comma = strchr (id, ',');
|
||||
if (comma == NULL)
|
||||
comma = id + strlen (id);
|
||||
g_hash_table_insert (thread_ids,
|
||||
strndup (id, comma - id), NULL);
|
||||
id = comma;
|
||||
if (*id)
|
||||
id++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
notmuch_message_t *
|
||||
notmuch_database_find_message (notmuch_database_t *notmuch,
|
||||
const char *message_id)
|
||||
|
@ -152,16 +175,8 @@ find_thread_ids (notmuch_database_t *notmuch,
|
|||
|
||||
find_messages_by_term (db, "ref", message_id, &child, &children_end);
|
||||
for ( ; child != children_end; child++) {
|
||||
const char *thread_id;
|
||||
doc = find_message_by_docid (db, *child);
|
||||
|
||||
thread_id = doc.get_value (NOTMUCH_VALUE_THREAD).c_str ();
|
||||
if (strlen (thread_id) == 0) {
|
||||
fprintf (stderr, "Database error: Message with doc_id %u has empty thread-id value (value index %d)\n",
|
||||
*child, NOTMUCH_VALUE_THREAD);
|
||||
} else {
|
||||
g_hash_table_insert (thread_ids, strdup (thread_id), NULL);
|
||||
}
|
||||
insert_thread_id (thread_ids, doc);
|
||||
}
|
||||
|
||||
for (i = 0; i < parents->len; i++) {
|
||||
|
|
Loading…
Reference in a new issue