]> git.notmuchmail.org Git - notmuch/commitdiff
lib/n_d_remove_message: do not remove unique filename
authorDavid Bremner <david@tethera.net>
Thu, 20 Jul 2023 12:08:01 +0000 (09:08 -0300)
committerDavid Bremner <david@tethera.net>
Sat, 22 Jul 2023 10:15:59 +0000 (07:15 -0300)
It is wasteful to remove a filename term when the whole message
document is about to be removed from the database. Profiling with perf
shows this takes a significant portion of the time when cleaning up
removed files in the database.

The logic of n_d_remove_message becomes a bit more convoluted here in
order to make the change minimal.

It is possible that this function can be further optimized, since the
expansion of filename terms into filenames is probably not needed
here.

lib/database.cc

index 6987e2f417ae5039294b078836c24f7779b01506..737a3f3060677b4e7fd5a55fbe5268082f0867f2 100644 (file)
@@ -1454,7 +1454,9 @@ notmuch_database_remove_message (notmuch_database_t *notmuch,
                                                        &message);
 
     if (status == NOTMUCH_STATUS_SUCCESS && message) {
-       status = _notmuch_message_remove_filename (message, filename);
+       if (notmuch_message_count_files (message) > 1) {
+           status = _notmuch_message_remove_filename (message, filename);
+       }
        if (status == NOTMUCH_STATUS_SUCCESS)
            status = _notmuch_message_delete (message);
        else if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID)