aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--notmuch-new.c16
-rwxr-xr-xtest/atomicity1
2 files changed, 16 insertions, 1 deletions
diff --git a/notmuch-new.c b/notmuch-new.c
index 598a2083..e79593cd 100644
--- a/notmuch-new.c
+++ b/notmuch-new.c
@@ -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;
}
diff --git a/test/atomicity b/test/atomicity
index 88b39587..eeff6be9 100755
--- a/test/atomicity
+++ b/test/atomicity
@@ -94,7 +94,6 @@ for ((i = 0; i < $outcount; i++)); do
done
test_begin_subtest '"notmuch new" is idempotent under arbitrary aborts'
-test_subtest_known_broken
test_expect_equal_file GDB searchall expectall
test_expect_success GDB "detected $outcount>10 abort points" "test $outcount -gt 10"