Mercurial > dovecot > core-2.2
changeset 22817:ccd84e5bcf8c
lib-storage: Add mail_storage_lock_create()
This is split off of mailbox_lock_file_create().
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 06 Feb 2018 17:47:37 +0200 |
parents | d1debec5d1c1 |
children | c4c14db5c639 |
files | src/lib-storage/mail-storage-private.h src/lib-storage/mail-storage.c |
diffstat | 2 files changed, 29 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-storage-private.h Tue Feb 06 17:35:18 2018 +0200 +++ b/src/lib-storage/mail-storage-private.h Tue Feb 06 17:47:37 2018 +0200 @@ -10,6 +10,9 @@ #include "mailbox-attribute-private.h" #include "mail-index-private.h" +struct file_lock; +struct file_create_settings; + /* Default prefix for indexes */ #define MAIL_INDEX_PREFIX "dovecot.index" @@ -818,10 +821,15 @@ /* Returns -1 if error, 0 if failed with EEXIST, 1 if ok */ int mailbox_create_fd(struct mailbox *box, const char *path, int flags, int *fd_r); -/* Create a lock file to the mailbox with the given filename. If it succeeds, +/* Create a lock file with the given path and settings. If it succeeds, returns 1 and lock_r, which needs to be freed once finished with the lock. - If lock_secs is reached, returns 0 and error_r. Returns -1 and sets error_r - on other errors. */ + If lock_set->lock_timeout_secs is reached, returns 0 and error_r. Returns + -1 and sets error_r on other errors. */ +int mail_storage_lock_create(const char *lock_path, + const struct file_create_settings *lock_set, + struct file_lock **lock_r, const char **error_r); +/* Create a lock file to the mailbox with the given filename. Returns the same + as mail_storage_lock_create(). */ int mailbox_lock_file_create(struct mailbox *box, const char *lock_fname, unsigned int lock_secs, struct file_lock **lock_r, const char **error_r);
--- a/src/lib-storage/mail-storage.c Tue Feb 06 17:35:18 2018 +0200 +++ b/src/lib-storage/mail-storage.c Tue Feb 06 17:47:37 2018 +0200 @@ -2855,6 +2855,23 @@ va_end(va); } +int mail_storage_lock_create(const char *lock_path, + const struct file_create_settings *lock_set, + struct file_lock **lock_r, const char **error_r) +{ + bool created; + + if (file_create_locked(lock_path, lock_set, lock_r, + &created, error_r) == -1) { + *error_r = t_strdup_printf("file_create_locked(%s) failed: %s", + lock_path, *error_r); + return errno == EAGAIN ? 0 : -1; + } + file_lock_set_close_on_free(*lock_r, TRUE); + file_lock_set_unlink_on_free(*lock_r, TRUE); + return 1; +} + int mailbox_lock_file_create(struct mailbox *box, const char *lock_fname, unsigned int lock_secs, struct file_lock **lock_r, const char **error_r) @@ -2862,7 +2879,6 @@ const struct mailbox_permissions *perm; struct file_create_settings set; const char *lock_path; - bool created; perm = mailbox_get_permissions(box); i_zero(&set); @@ -2893,12 +2909,5 @@ set.mkdir_mode = 0700; } - if (file_create_locked(lock_path, &set, lock_r, &created, error_r) == -1) { - *error_r = t_strdup_printf("file_create_locked(%s) failed: %s", - lock_path, *error_r); - return errno == EAGAIN ? 0 : -1; - } - file_lock_set_close_on_free(*lock_r, TRUE); - file_lock_set_unlink_on_free(*lock_r, TRUE); - return 1; + return mail_storage_lock_create(lock_path, &set, lock_r, error_r); }