diff --git a/mx_flock.c b/mx_flock.c index bdbbaf30..f6939f22 100644 --- a/mx_flock.c +++ b/mx_flock.c @@ -58,11 +58,7 @@ static inline void _flock_free(struct mx_flock *lock) if (!lock) return; - if (lock->fname) - mx_free_null(lock->fname); - - if (lock->fd >= 0) - _flock_close(lock); + mx_free_null(lock->fname); free(lock); } @@ -112,6 +108,7 @@ struct mx_flock *mx_flock(int operation, char *fmt, ...) if (errno == EWOULDBLOCK) return lock; mx_log_err("flock(): %m"); + _flock_close(lock); _flock_free(lock); return NULL; } @@ -155,3 +152,8 @@ int mx_funlock(struct mx_flock *lock) return res; } + +void mx_flock_free(struct mx_flock *lock) +{ + _flock_free(lock); +} diff --git a/mx_flock.h b/mx_flock.h index 22725383..34ab4e8d 100644 --- a/mx_flock.h +++ b/mx_flock.h @@ -10,5 +10,6 @@ struct mx_flock { struct mx_flock *mx_flock(int operation, char *fmt, ...); int mx_funlock(struct mx_flock *lock); +void mx_flock_free(struct mx_flock *lock); #endif