mirror of
https://git.notmuchmail.org/git/notmuch
synced 2025-02-17 23:53:15 +01:00
lib: Wrap notmuch_database_add_message in an atomic section.
Adding a message may involve changes to multiple database documents, and thus needs to be done in a transaction. This makes add_message (and, I think, the whole library) atomicity-safe: library callers only needs to use atomic sections if they needs atomicity across multiple library calls.
This commit is contained in:
parent
7a8046ced8
commit
51c3c0b2d2
1 changed files with 13 additions and 1 deletions
|
@ -1601,7 +1601,7 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
|
||||||
{
|
{
|
||||||
notmuch_message_file_t *message_file;
|
notmuch_message_file_t *message_file;
|
||||||
notmuch_message_t *message = NULL;
|
notmuch_message_t *message = NULL;
|
||||||
notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS;
|
notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS, ret2;
|
||||||
notmuch_private_status_t private_status;
|
notmuch_private_status_t private_status;
|
||||||
|
|
||||||
const char *date, *header;
|
const char *date, *header;
|
||||||
|
@ -1619,6 +1619,12 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
|
||||||
if (message_file == NULL)
|
if (message_file == NULL)
|
||||||
return NOTMUCH_STATUS_FILE_ERROR;
|
return NOTMUCH_STATUS_FILE_ERROR;
|
||||||
|
|
||||||
|
/* Adding a message may change many documents. Do this all
|
||||||
|
* atomically. */
|
||||||
|
ret = notmuch_database_begin_atomic (notmuch);
|
||||||
|
if (ret)
|
||||||
|
goto DONE;
|
||||||
|
|
||||||
notmuch_message_file_restrict_headers (message_file,
|
notmuch_message_file_restrict_headers (message_file,
|
||||||
"date",
|
"date",
|
||||||
"from",
|
"from",
|
||||||
|
@ -1740,6 +1746,12 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
|
||||||
if (message_file)
|
if (message_file)
|
||||||
notmuch_message_file_close (message_file);
|
notmuch_message_file_close (message_file);
|
||||||
|
|
||||||
|
ret2 = notmuch_database_end_atomic (notmuch);
|
||||||
|
if ((ret == NOTMUCH_STATUS_SUCCESS ||
|
||||||
|
ret == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) &&
|
||||||
|
ret2 != NOTMUCH_STATUS_SUCCESS)
|
||||||
|
ret = ret2;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue