From: Michael Haggerty Date: Tue, 01 Apr 2014 15:58:13 GMT Subject: [PATCH 05/22] lockfile: unlock file if lockfile permissions cannot be adjusted Message-ID: <1396367910-7299-6-git-send-email-mhagger@alum.mit.edu> In-Reply-To: <1396367910-7299-1-git-send-email-mhagger@alum.mit.edu> If the call to adjust_shared_perm() fails, lock_file returns -1, which to the caller looks like any other failure to lock the file. So in this case, roll back the lockfile before returning so that the lock file is deleted immediately and the lockfile object is left in a predictable state that (namely, unlocked). Previously, the lockfile was retained until process cleanup in this situation. Signed-off-by: Michael Haggerty --- lockfile.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lockfile.c b/lockfile.c index c1af65b..1928e5e 100644 --- a/lockfile.c +++ b/lockfile.c @@ -148,9 +148,11 @@ static int lock_file(struct lock_file *lk, const char *path, int flags) lock_file_list = lk; lk->on_list = 1; } - if (adjust_shared_perm(lk->filename)) - return error("cannot fix permission bits on %s", - lk->filename); + if (adjust_shared_perm(lk->filename)) { + error("cannot fix permission bits on %s", lk->filename); + rollback_lock_file(lk); + return -1; + } } else lk->filename[0] = 0; -- 1.9.0