Eliza Velasquez <eliza@eliza.sh> writes: > Hello notmuch, > > As the subject says, it seems like the filename cache for a message is > not reliably invalidated when notmuch_message_tags_to_maildir_flags is > called, causing the following series of function calls to behave > unexpectedly. > > - notmuch_database_index_file > - notmuch_message_get_filenames > - notmuch_message_tags_to_maildir_flags > - notmuch_message_get_filenames (stale list returned) > > According to the investigator [1], this happens about 10% of the time, > but it's possible that this is just because there is some quirk in the > client-side code causing it to trigger only sometimes. that cache is supposed to be invalidated by calls to _notmuch_message_add_filename and _notmuch_message_remove_filename. There is one unchecked call to _notmuch_message_add_term that looks a bit suspect. The obvious thing that can go wrong is filename getting too long. Here is a patch to maybe return better diagnostics in that case diff --git a/lib/message.cc b/lib/message.cc index 63b216b6..bebc5f6a 100644 --- a/lib/message.cc +++ b/lib/message.cc @@ -169,6 +169,7 @@ _notmuch_message_create_for_document (const void *talloc_owner, message->doc = doc; message->termpos = 0; + message->modified = FALSE; return message; } @@ -937,6 +938,7 @@ _notmuch_message_add_filename (notmuch_message_t *message, { const char *relative, *directory; notmuch_status_t status; + notmuch_private_status_t private_status; void *local = talloc_new (message); char *direntry; @@ -960,7 +962,11 @@ _notmuch_message_add_filename (notmuch_message_t *message, /* New file-direntry allows navigating to this message with * notmuch_directory_get_child_files() . */ - _notmuch_message_add_term (message, "file-direntry", direntry); + private_status = _notmuch_message_add_term (message, "file-direntry", direntry); + status = COERCE_STATUS (private_status, + "Unexpected error from _notmuch_message_add_term"); + if (status) + return status; _notmuch_message_add_folder_terms (message, directory); _notmuch_message_add_path_terms (message, directory); The other issue that might cause intermittent failures is uncaught exceptions. We cleaned a bunch of those up a few years ago, but it looks like we missed a few spots. Off hand I'm not sure what would be causing such exceptions, but _notmuch_message_add_term and _notmuch_message_remove_term should probably have the Xapian operations wrapped in try / catch blocks. It might be worth running the failing test under gdb to see if you can spot exceptions. _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-leave@notmuchmail.org