From: Timo Sirainen Date: Wed, 21 Jun 2017 22:52:29 +0000 (+0300) Subject: lib: Add file_lock_set_close_on_free() X-Git-Tag: 2.2.32.rc1~162 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d9781e2511d916ef5ae899bd5de91f665cd6649a;p=thirdparty%2Fdovecot%2Fcore.git lib: Add file_lock_set_close_on_free() --- diff --git a/src/lib/file-lock.c b/src/lib/file-lock.c index bef1548c09..4f5ad49d89 100644 --- a/src/lib/file-lock.c +++ b/src/lib/file-lock.c @@ -19,6 +19,7 @@ struct file_lock { int lock_type; enum file_lock_method lock_method; bool unlink_on_free; + bool close_on_free; }; static struct timeval lock_wait_start; @@ -346,6 +347,11 @@ void file_lock_set_unlink_on_free(struct file_lock *lock, bool set) lock->unlink_on_free = set; } +void file_lock_set_close_on_free(struct file_lock *lock, bool set) +{ + lock->close_on_free = set; +} + void file_unlock(struct file_lock **_lock) { struct file_lock *lock = *_lock; @@ -375,6 +381,8 @@ void file_lock_free(struct file_lock **_lock) if (lock->unlink_on_free) i_unlink(lock->path); + if (lock->close_on_free) + i_close_fd(&lock->fd); file_lock_log_warning_if_slow(lock); i_free(lock->path); diff --git a/src/lib/file-lock.h b/src/lib/file-lock.h index 377abdbf8c..022210600a 100644 --- a/src/lib/file-lock.h +++ b/src/lib/file-lock.h @@ -48,6 +48,9 @@ int file_lock_try_update(struct file_lock *lock, int lock_type); /* When the lock is freed, unlink() the file automatically. This can be useful for files that are only created to exist as lock files. */ void file_lock_set_unlink_on_free(struct file_lock *lock, bool set); +/* When the lock is freed, close the fd automatically. This can + be useful for files that are only created to exist as lock files. */ +void file_lock_set_close_on_free(struct file_lock *lock, bool set); /* Unlock and free the lock. */ void file_unlock(struct file_lock **lock);