Fix "notmuch new" (bad performance, and no committing of results).
authorCarl Worth <cworth@cworth.org>
Tue, 27 Oct 2009 23:07:27 +0000 (16:07 -0700)
committerCarl Worth <cworth@cworth.org>
Tue, 27 Oct 2009 23:07:27 +0000 (16:07 -0700)
We were incorrectly only destroying messages in the case of
successful addition to the database, and not in other cases,
(such as failure due to FILE_NOT_EMAIL).

I'm still not entirely sure why this was performing abysmally, (as in
making an operation that should take a small fraction of a second take
10 seconds), nor why it was causing the database to entirely fail to
get new results.

But fortunately, this all seems to work now.

notmuch.c

index ca30b521d725fe97ea9b77dbc040b74a3ce9ab10..0fc4433b8325a298e439b65c78ec48b3c7df05f9 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -180,7 +180,7 @@ add_files_recursive (notmuch_database_t *notmuch,
     char *next = NULL;
     time_t path_mtime, path_dbtime;
     notmuch_status_t status, ret = NOTMUCH_STATUS_SUCCESS;
-    notmuch_message_t *message, **closure;
+    notmuch_message_t *message = NULL, **closure;
 
     /* If we're told to, we bail out on encountering a read-only
      * directory, (with this being a clear clue from the user to
@@ -264,10 +264,8 @@ add_files_recursive (notmuch_database_t *notmuch,
                    /* success */
                    case NOTMUCH_STATUS_SUCCESS:
                        state->added_messages++;
-                       if (state->callback) {
+                       if (state->callback)
                            (state->callback) (message);
-                           notmuch_message_destroy (message);
-                       }
                        break;
                    /* Non-fatal issues (go on to next file) */
                    case NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID:
@@ -292,6 +290,12 @@ add_files_recursive (notmuch_database_t *notmuch,
                        INTERNAL_ERROR ("add_message returned unexpected value: %d",  status);
                        goto DONE;
                }
+
+               if (message) {
+                   notmuch_message_destroy (message);
+                   message = NULL;
+               }
+
                if (state->processed_files % 1000 == 0)
                    add_files_print_progress (state);
            }