summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Bremner <david@tethera.net>2023-07-20 09:08:01 -0300
committerDavid Bremner <david@tethera.net>2023-07-22 07:15:59 -0300
commitb6f144abe1f5aa3519240cf52f4cb9907fefcd0e (patch)
tree6d6c9b91b114a8b5e062651b870bf89c0733fc9d
parentd93d49b6aed5b3f71651ffe79225da08c7d8f1aa (diff)
lib/n_d_remove_message: do not remove unique filename
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.
-rw-r--r--lib/database.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/database.cc b/lib/database.cc
index 6987e2f4..737a3f30 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -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)