All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Steffen Prohaska <prohaska@zib.de>
Cc: git@vger.kernel.org, peff@peff.net, pclouds@gmail.com,
	john@keeping.me.uk, schacon@gmail.com
Subject: Re: [PATCH v6 5/6] Change copy_fd() to not close input fd
Date: Tue, 26 Aug 2014 10:10:34 -0700	[thread overview]
Message-ID: <xmqqd2bnjhx1.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1409066605-4851-6-git-send-email-prohaska@zib.de> (Steffen Prohaska's message of "Tue, 26 Aug 2014 17:23:24 +0200")

Steffen Prohaska <prohaska@zib.de> writes:

> The caller opened the fd, so it should be responsible for closing it.

Hmmmm, I am not sure what the benefit of such a dogmatism.  This
function consumes all that is useful in the fd, and there is nothing
interesting that can be do further on it, no?

Ah, wait.  The caller could choose to rewind and reuse the contents,
and it is very selfish of this function to unilaterally declare that
once you give an fd to it you cannot do anything with it laster.

So I think this is a good change, but the justification is not
quite.  It is not "the caller should be responsible"; it is more
about "the callee did not open it, does not own it, and should allow
the caller, if it chooses, reuse it by seeking after the callee is
done."

>> Subject: Re: [PATCH v6 5/6] Change copy_fd() to not close input fd

Let's follow the "<area>: <description>" convention here, too, e.g.

    copy_fd(): allow callers to work on input fd after it returns

or something.

Thanks.

>  copy.c     | 5 +----
>  lockfile.c | 3 +++
>  2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/copy.c b/copy.c
> index a7f58fd..d0a1d82 100644
> --- a/copy.c
> +++ b/copy.c
> @@ -10,7 +10,6 @@ int copy_fd(int ifd, int ofd)
>  			break;
>  		if (len < 0) {
>  			int read_error = errno;
> -			close(ifd);
>  			return error("copy-fd: read returned %s",
>  				     strerror(read_error));
>  		}
> @@ -21,17 +20,14 @@ int copy_fd(int ifd, int ofd)
>  				len -= written;
>  			}
>  			else if (!written) {
> -				close(ifd);
>  				return error("copy-fd: write returned 0");
>  			} else {
>  				int write_error = errno;
> -				close(ifd);
>  				return error("copy-fd: write returned %s",
>  					     strerror(write_error));
>  			}
>  		}
>  	}
> -	close(ifd);
>  	return 0;
>  }
>  
> @@ -60,6 +56,7 @@ int copy_file(const char *dst, const char *src, int mode)
>  		return fdo;
>  	}
>  	status = copy_fd(fdi, fdo);
> +	close(fdi);
>  	if (close(fdo) != 0)
>  		return error("%s: close error: %s", dst, strerror(errno));
>  
> diff --git a/lockfile.c b/lockfile.c
> index 2564a7f..2448d30 100644
> --- a/lockfile.c
> +++ b/lockfile.c
> @@ -224,8 +224,11 @@ int hold_lock_file_for_append(struct lock_file *lk, const char *path, int flags)
>  	} else if (copy_fd(orig_fd, fd)) {
>  		if (flags & LOCK_DIE_ON_ERROR)
>  			exit(128);
> +		close(orig_fd);
>  		close(fd);
>  		return -1;
> +	} else {
> +		close(orig_fd);
>  	}
>  	return fd;
>  }

  reply	other threads:[~2014-08-26 17:10 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-26 15:23 [PATCH v6 0/6] Stream fd to clean filter; GIT_MMAP_LIMIT, GIT_ALLOC_LIMIT with git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 1/6] convert: drop arguments other than 'path' from would_convert_to_git() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 2/6] Add git_env_ulong() to parse environment variable Steffen Prohaska
2014-08-26 18:21   ` Jeff King
2014-08-26 20:20     ` Junio C Hamano
2014-08-26 20:31       ` Jeff King
2014-08-26 21:54         ` Junio C Hamano
2014-08-27  4:46           ` Jeff King
2014-08-27 14:47             ` Junio C Hamano
2014-08-28 15:21               ` Steffen Prohaska
2014-08-28 17:13                 ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 3/6] Change GIT_ALLOC_LIMIT check to use git_env_ulong() Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 4/6] Introduce GIT_MMAP_LIMIT to allow testing expected mmap size Steffen Prohaska
2014-08-26 15:23 ` [PATCH v6 5/6] Change copy_fd() to not close input fd Steffen Prohaska
2014-08-26 17:10   ` Junio C Hamano [this message]
2014-08-26 18:29   ` Jeff King
2014-08-28 15:37     ` Steffen Prohaska
2014-08-28 17:15       ` Junio C Hamano
2014-08-26 15:23 ` [PATCH v6 6/6] convert: stream from fd to required clean filter to reduce used address space Steffen Prohaska

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xmqqd2bnjhx1.fsf@gitster.dls.corp.google.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=john@keeping.me.uk \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=prohaska@zib.de \
    --cc=schacon@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.