From: Michael Haggerty Date: Sat, 06 Sep 2014 07:50:32 GMT Subject: [PATCH v4 18/32] commit_lock_file(): if close fails, roll back Message-ID: <1409989846-22401-19-git-send-email-mhagger@alum.mit.edu> In-Reply-To: <1409989846-22401-1-git-send-email-mhagger@alum.mit.edu> If closing an open lockfile fails, then we cannot be sure of the contents of the lockfile, so there is nothing sensible to do but delete it. This change also leaves the lock_file object in a defined state in this error path (namely, unlocked). Signed-off-by: Michael Haggerty --- lockfile.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lockfile.c b/lockfile.c index 716b674..213783a 100644 --- a/lockfile.c +++ b/lockfile.c @@ -310,8 +310,12 @@ int commit_lock_file(struct lock_file *lk) if (!lk->filename[0]) die("BUG: attempt to commit unlocked object"); - if (lk->fd >= 0 && close_lock_file(lk)) + if (lk->fd >= 0 && close_lock_file(lk)) { + int save_errno = errno; + rollback_lock_file(lk); + errno = save_errno; return -1; + } strcpy(result_file, lk->filename); /* remove ".lock": */ -- 2.1.0