git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] Fix handle leak in write_tree

From
Junio C Hamano <junkio@cox.net>
Date
Apr 24, 2007, 05:16 UTC
Message-ID
<7vps5u9wsk.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20070423194925.GA5163@steel.home>
Alex Riesen <raa.lkml@gmail.com> writes:
Show 30 quoted lines
> This is a quick and dirty fix for the broken "git cherry-pick -n" on
> some broken OS, which does not remove the directory entry after unlink
> succeeded(!) if the file is still open somewher.
> The entry is left but "protected": no open, no unlink, no stat.
> Very annoying.
>
> Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
> ---
>
> That should be enough to get going, but I have to say that the
> interface to lockfiles is really troublesome. Why has the caller close
> a handle it didn't open? Especially if there are perfect matches for
> the opening function (hold_locked_index) in form of commit and
> rollback?
>
> How about something like this (just interface):
>
> struct lock_file
> {
> 	struct lock_file *next;
> 	pid_t owner;
> 	int fd;
> 	char on_list;
> 	char filename[PATH_MAX];
> };
>
> struct lock_file *open_locked(const char *path, int die_on_error);
> struct lock_file *open_index_locked(int die_on_error);
> void commit_lock_file(struct lock_file *); /* always assuming .lock */
> void rollback_lock_file(struct lock_file *);

I agree that making commit and rollback close the file descriptor and lock holders to use lock->fd for write() makes more sense, although it is a bit unclear from the above set of function signatures what your plan on the lifetime rule for "struct lock_file" is. If it will be linked to the list given to the atexit() handler and the caller of open_locked() never frees it, I think I am fine with the interface.

Previous: Alex RiesenNext: Alex Riesen
Message 2 of 7 in “Fix handle leak in write_tree”
  1. Fix handle leak in write_treeAlex Riesen, Apr 23, 2007
  2. Junio C HamanoApr 24, 2007
  3. Alex RiesenApr 24, 2007
  4. Junio C HamanoApr 24, 2007
  5. Alex RiesenApr 25, 2007
  6. Junio C HamanoApr 25, 2007
  7. Fix handle leak in write_treeAlex Riesen, Apr 25, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.