new: Wrap adding and removing messages in atomic sections.
[notmuch] / notmuch-new.c
index 598a2083ffaec689285878a6a4b873d8d6f4b245..e79593cd092dd3345a8bac182234833ecfc92333 100644 (file)
@@ -450,6 +450,12 @@ add_files_recursive (notmuch_database_t *notmuch,
            fflush (stdout);
        }
 
+       status = notmuch_database_begin_atomic (notmuch);
+       if (status) {
+           ret = status;
+           goto DONE;
+       }
+
        status = notmuch_database_add_message (notmuch, next, &message);
        switch (status) {
        /* success */
@@ -490,6 +496,12 @@ add_files_recursive (notmuch_database_t *notmuch,
            goto DONE;
        }
 
+       status = notmuch_database_end_atomic (notmuch);
+       if (status) {
+           ret = status;
+           goto DONE;
+       }
+
        if (message) {
            notmuch_message_destroy (message);
            message = NULL;
@@ -728,6 +740,9 @@ remove_filename (notmuch_database_t *notmuch,
 {
     notmuch_status_t status;
     notmuch_message_t *message;
+    status = notmuch_database_begin_atomic (notmuch);
+    if (status)
+       return status;
     message = notmuch_database_find_message_by_filename (notmuch, path);
     status = notmuch_database_remove_message (notmuch, path);
     if (status == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) {
@@ -737,6 +752,7 @@ remove_filename (notmuch_database_t *notmuch,
     } else
        add_files_state->removed_messages++;
     notmuch_message_destroy (message);
+    notmuch_database_end_atomic (notmuch);
     return status;
 }