bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#13530: head: memory exhausted when printing all from stdin but last


From: Pádraig Brady
Subject: bug#13530: head: memory exhausted when printing all from stdin but last P/E bytes
Date: Wed, 23 Jan 2013 13:03:55 +0000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:13.0) Gecko/20120615 Thunderbird/13.0.1

On 01/23/2013 12:53 PM, Bernhard Voelker wrote:
On 01/23/2013 01:34 PM, Pádraig Brady wrote:
There is the argument that we _should_ allocate
everything up front to indicate immediately
that the system can't (currently) support the requested operation,
but given the 'currently' caveat above I guess it's
more general to fail when we actually run out of mem?

head doesn't "allocate everything up front" - instead, it only
allocates the pointer array which would hold the actual data.

Sure. I was wondering whether that should change
to allocate everything up front so as to exit early.

The strategy in elide_tail_lines_pipe() seems more robust:
it allocates memory when needed.

Yes probably.

Or another (probably martian) idea:
what about a tmpfile()?

Not worth it I think.

       free_mem:
-      for (i = 0; i < n_bufs; i++)
+      for (i = 0; i < n_alloc; i++)
           free (b[i]);
         free (b);

BTW: both in the old and the new version, the loop can break
if (b[i] == 0) because the array is filled from the beginning.

The new version only frees what's allocated and so gets this benefit too.

-      for (i = 0; i < n_bufs; i++)
+      for (i = 0; i < n_bufs && b[i]; i++)

This makes "echo 123 | head -c -T" ~40% faster here on my PC.

nice

thanks,
Pádraig





reply via email to

[Prev in Thread] Current Thread [Next in Thread]