Subject: Re: [PATCH v5] lockfile: add PID file for debugging stale locks

From: Junio C Hamano <[email-masked]>
Date: Wed, 21 Jan 2026 10:55:42 -0800

Jeff King <[email-masked]> writes:

> The second half is still valid, I think, but at that point it is the
> only path that uses the close() in the out-path, so we might as well
> drop the out-path one.

True.  A fix-up may look like this.  I've got rid of the assignments
to "fd" that are not used.

The changes to first two files simply revert unnecessary changes.

 builtin/commit.c | 3 ++-
 builtin/gc.c     | 6 ++++--
 lockfile.c       | 6 +-----
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git c/builtin/commit.c w/builtin/commit.c
index 4378256fa5..0243f17d53 100644
--- c/builtin/commit.c
+++ w/builtin/commit.c
@@ -539,7 +539,8 @@ static const char *prepare_index(const char **argv, const char *prefix,
 
 	path = repo_git_path(the_repository, "next-index-%"PRIuMAX,
 			     (uintmax_t) getpid());
-	hold_lock_file_for_update(&false_lock, path, LOCK_DIE_ON_ERROR);
+	hold_lock_file_for_update(&false_lock, path,
+				  LOCK_DIE_ON_ERROR);
 
 	create_base_index(current_head);
 	add_remove_files(&partial);
diff --git c/builtin/gc.c w/builtin/gc.c
index 1dcc8dd550..92c6e7b954 100644
--- c/builtin/gc.c
+++ w/builtin/gc.c
@@ -748,7 +748,8 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
 		xsnprintf(my_host, sizeof(my_host), "unknown");
 
 	pidfile_path = repo_git_path(the_repository, "gc.pid");
-	fd = hold_lock_file_for_update(&lock, pidfile_path, LOCK_DIE_ON_ERROR);
+	fd = hold_lock_file_for_update(&lock, pidfile_path,
+				       LOCK_DIE_ON_ERROR);
 	if (!force) {
 		static char locking_host[HOST_NAME_MAX + 1];
 		static char *scan_fmt;
@@ -1015,7 +1016,8 @@ int cmd_gc(int argc,
 
 	if (daemonized) {
 		char *path = repo_git_path(the_repository, "gc.log");
-		hold_lock_file_for_update(&log_lock, path, LOCK_DIE_ON_ERROR);
+		hold_lock_file_for_update(&log_lock, path,
+					  LOCK_DIE_ON_ERROR);
 		dup2(get_lock_file_fd(&log_lock), 2);
 		atexit(process_log_file_at_exit);
 		free(path);
diff --git c/lockfile.c w/lockfile.c
index 6d03c60d50..13e2ad1307 100644
--- c/lockfile.c
+++ w/lockfile.c
@@ -110,7 +110,7 @@ static struct tempfile *create_lock_pid_file(const char *pid_path, int mode)
 {
 	struct strbuf content = STRBUF_INIT;
 	struct tempfile *pid_tempfile = NULL;
-	int fd = -1;
+	int fd;
 
 	if (!lockfile_pid_enabled)
 		goto out;
@@ -123,18 +123,14 @@ static struct tempfile *create_lock_pid_file(const char *pid_path, int mode)
 	if (write_in_full(fd, content.buf, content.len) < 0) {
 		warning_errno(_("could not write lock pid file '%s'"), pid_path);
 		close(fd);
-		fd = -1;
 		unlink(pid_path);
 		goto out;
 	}
 
 	close(fd);
-	fd = -1;
 	pid_tempfile = register_tempfile(pid_path);
 
 out:
-	if (fd >= 0)
-		close(fd);
 	strbuf_release(&content);
 	return pid_tempfile;
 }