Re: fatal: Out of memory, getdelim failed under NFS mounts
- From
Yaroslav Halchenko <yoh@onerussian.com>
- Date
- Aug 10, 2017, 20:29 UTC
- Message-ID
- <20170810202942.s232yr5stjxmmz4t@hopa.kiewit.dartmouth.edu>
- In-Reply-To
- <20170810200502.rutab4z3ft7gcpjz@sigill.intra.peff.net>
On Thu, 10 Aug 2017, Jeff King wrote:
> On Thu, Aug 10, 2017 at 09:58:37PM +0200, René Scharfe wrote:
> > > So the function is returning -1 and leaving ENOMEM in errno on > > > Yaroslav's system.
> > > I wonder if we are truly hitting out of memory, though. The same > > > symptom could bee seen if getdelim() does not touch errno when it > > > returns -1, but some other system call earlier set it to ENOMEM, > > > for example.
> > That can happen when the end of a file is reached; getdelim() returns > > -1 and leaves errno unchanged. So we need to set errno to 0 just > > before that call.
> Good catch. That's a bug in my original conversoin of > strbuf_getwholeline().
I think this did it! at least on this simple test... yet to test a bit more in those scenarios we ran into it before while testing git-annex.
commit 36ef5e3ad2c187d3be664c33dbc8c06e59bceaf4 (HEAD -> bf-seterrno0) Author: Yaroslav O. Halchenko <yhalchen@smaug.cns.dartmouth.edu> Date: Thu Aug 10 20:26:47 2017 +0000
BF: set errno to 0 before getdelim call to get unbiased assesment later
diff --git a/strbuf.c b/strbuf.c index 89d22e3b0..323c49ceb 100644 --- a/strbuf.c +++ b/strbuf.c @@ -476,6 +476,7 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term) /* Translate slopbuf to NULL, as we cannot call realloc on it */ if (!sb->alloc) sb->buf = NULL; + errno = 0; r = getdelim(&sb->buf, &sb->alloc, term, fp); if (r > 0) {
-- Yaroslav O. Halchenko Center for Open Neuroscience http://centerforopenneuroscience.org Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755 Phone: +1 (603) 646-9834 Fax: +1 (603) 646-1419 WWW: http://www.linkedin.com/in/yarik