# HG changeset patch # User Timo Sirainen # Date 1498085549 -10800 # Node ID 5b108ca20b05971317ea7b9173747daedae594b1 # Parent b553f6960cb9c05ad760b2ccc7bc99906732b23a lib: Add file_lock_set_close_on_free() diff -r b553f6960cb9 -r 5b108ca20b05 src/lib/file-lock.c --- a/src/lib/file-lock.c Thu Jun 22 01:47:51 2017 +0300 +++ b/src/lib/file-lock.c Thu Jun 22 01:52:29 2017 +0300 @@ -19,6 +19,7 @@ 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 @@ 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 @@ 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 -r b553f6960cb9 -r 5b108ca20b05 src/lib/file-lock.h --- a/src/lib/file-lock.h Thu Jun 22 01:47:51 2017 +0300 +++ b/src/lib/file-lock.h Thu Jun 22 01:52:29 2017 +0300 @@ -48,6 +48,9 @@ /* 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);