From: Junio C Hamano <gitster@pobox.com>
To: Stefan Beller <sbeller@google.com>
Cc: git@vger.kernel.org, jacob.keller@gmail.com, peff@peff.net,
jrnieder@gmail.com, johannes.schindelin@gmail.com,
Jens.Lehmann@web.de, vlovich@gmail.com
Subject: Re: [PATCHv3 04/13] strbuf: add strbuf_read_once to read without blocking
Date: Mon, 21 Sep 2015 17:17:31 -0700 [thread overview]
Message-ID: <xmqqoagv71es.fsf@gitster.mtv.corp.google.com> (raw)
In-Reply-To: <1442875159-13027-5-git-send-email-sbeller@google.com> (Stefan Beller's message of "Mon, 21 Sep 2015 15:39:10 -0700")
Stefan Beller <sbeller@google.com> writes:
> The new call will read a fd into a strbuf once. The underlying call
"read from a fd"
> xread_nonblock is meant to execute non blockingly if the fd is set to
> O_NONBLOCK.
The latter sentence adds more questions than it answers. If the
file descriptor is not set to non-blocking, what happens? Is it a
bug in the caller, and if so do we give help to diagnose such a bug?
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> strbuf.c | 11 +++++++++++
> strbuf.h | 6 ++++++
> 2 files changed, 17 insertions(+)
>
> diff --git a/strbuf.c b/strbuf.c
> index cce5eed..35e71b8 100644
> --- a/strbuf.c
> +++ b/strbuf.c
> @@ -384,6 +384,17 @@ ssize_t strbuf_read(struct strbuf *sb, int fd, size_t hint)
> return sb->len - oldlen;
> }
>
> +ssize_t strbuf_read_once(struct strbuf *sb, int fd, size_t hint)
> +{
> + ssize_t cnt;
> +
> + strbuf_grow(sb, hint ? hint : 8192);
> + cnt = xread_nonblock(fd, sb->buf + sb->len, sb->alloc - sb->len - 1);
> + if (cnt > 0)
> + strbuf_setlen(sb, sb->len + cnt);
> + return cnt;
OK. So the caller that receives a negative value can check errno to
see if we got EAGAIN. How would the caller tell when it got an EOF?
> /**
> + * Same as strbuf_read, just returns non-blockingly by ignoring EAGAIN.
I do not think you want to say "same as" for this one.
strbuf_read() is about reading thru to the end, but this is about
making some progress without blocking.
Read from a file descriptor that is marked as O_NONBLOCK without
blocking. Returns the number of new bytes appended to the sb.
Negative return value signals there was an error returned from
underlying read(2), in which case the caller should check errno.
e.g. errno == EAGAIN when the read may have blocked.
or something? Again, how would a caller tell when it got an EOF?
> + * The fd must have set O_NONBLOCK.
> + */
> +extern ssize_t strbuf_read_once(struct strbuf *, int fd, size_t hint);
> +
> +/**
> * Read the contents of a file, specified by its path. The third argument
> * can be used to give a hint about the file size, to avoid reallocs.
> */
next prev parent reply other threads:[~2015-09-22 0:17 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-21 22:39 [PATCHv3 00/13] fetch submodules in parallel and a preview on parallel "submodule update" Stefan Beller
2015-09-21 22:39 ` [PATCHv3 01/13] Sending "Fetching submodule <foo>" output to stderr Stefan Beller
2015-09-21 23:47 ` Junio C Hamano
2015-09-21 22:39 ` [PATCHv3 02/13] xread: poll on non blocking fds Stefan Beller
2015-09-21 23:55 ` Junio C Hamano
2015-09-22 4:55 ` Torsten Bögershausen
2015-09-22 6:23 ` Jacob Keller
2015-09-22 18:40 ` Torsten Bögershausen
2015-09-22 19:45 ` Junio C Hamano
2015-09-22 19:49 ` Jeff King
2015-09-22 20:00 ` Junio C Hamano
2015-09-23 0:14 ` Stefan Beller
2015-09-23 0:43 ` Junio C Hamano
2015-09-23 1:51 ` Jeff King
2015-09-21 23:56 ` Eric Sunshine
2015-09-22 15:58 ` Junio C Hamano
2015-09-22 17:38 ` Stefan Beller
2015-09-22 18:21 ` Junio C Hamano
2015-09-22 18:41 ` Stefan Beller
2015-09-21 22:39 ` [PATCHv3 03/13] xread_nonblock: add functionality to read from fds nonblockingly Stefan Beller
2015-09-22 0:02 ` Junio C Hamano
2015-09-22 0:10 ` Junio C Hamano
2015-09-22 6:26 ` Jacob Keller
2015-09-22 6:27 ` Jacob Keller
2015-09-22 15:59 ` Junio C Hamano
2015-09-21 22:39 ` [PATCHv3 04/13] strbuf: add strbuf_read_once to read without blocking Stefan Beller
2015-09-22 0:17 ` Junio C Hamano [this message]
2015-09-22 6:29 ` Jacob Keller
2015-09-21 22:39 ` [PATCHv3 05/13] run-command: factor out return value computation Stefan Beller
2015-09-22 0:38 ` Junio C Hamano
2015-09-21 22:39 ` [PATCHv3 06/13] run-command: add an asynchronous parallel child processor Stefan Beller
2015-09-22 1:08 ` Junio C Hamano
2015-09-22 18:28 ` Stefan Beller
2015-09-22 19:53 ` Junio C Hamano
2015-09-22 21:31 ` Stefan Beller
2015-09-22 21:41 ` Junio C Hamano
2015-09-22 21:54 ` Stefan Beller
2015-09-22 22:23 ` Junio C Hamano
2015-09-21 22:39 ` [PATCHv3 07/13] fetch_populated_submodules: use new parallel job processing Stefan Beller
2015-09-22 16:28 ` Junio C Hamano
2015-09-21 22:39 ` [PATCHv3 08/13] submodules: allow parallel fetching, add tests and documentation Stefan Beller
2015-09-21 22:39 ` [PATCHv3 09/13] submodule config: keep update strategy around Stefan Beller
2015-09-22 0:56 ` Eric Sunshine
2015-09-22 15:50 ` Stefan Beller
2015-09-21 22:39 ` [PATCHv3 10/13] git submodule update: cmd_update_recursive Stefan Beller
2015-09-21 22:39 ` [PATCHv3 11/13] git submodule update: cmd_update_clone Stefan Beller
2015-09-21 22:39 ` [PATCHv3 12/13] git submodule update: cmd_update_fetch Stefan Beller
2015-09-21 22:39 ` [PATCHv3 13/13] Rewrite submodule update in C Stefan Beller
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=xmqqoagv71es.fsf@gitster.mtv.corp.google.com \
--to=gitster@pobox.com \
--cc=Jens.Lehmann@web.de \
--cc=git@vger.kernel.org \
--cc=jacob.keller@gmail.com \
--cc=johannes.schindelin@gmail.com \
--cc=jrnieder@gmail.com \
--cc=peff@peff.net \
--cc=sbeller@google.com \
--cc=vlovich@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.