bug-gnulib
[Top][All Lists]
Advanced

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

test-fprintf-posix3.c:


From: Bruce Korb
Subject: test-fprintf-posix3.c:
Date: Wed, 10 Nov 2010 17:10:18 -0800
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.12) Gecko/20100914 SUSE/3.0.8 Thunderbird/3.0.8

I finally broke down and used GDB.
RLIMIT_DATA and RLIMIT_AS appear to be set to 10,000,000.
An attempt to malloc 10 million (MAX_ALLOC_TOTAL) fails
and the two failing tests exit with status "1".
After reading the man page for getrlimit and looking at
this code, my question is, "Why would you expect this
to *NOT* fail?"  After all, assuming that any heap space
at all has been allocated, an attempt to allocate the full
size of the address and/or data space is surely going to
fail.  What else can be expected?

If your intent is to squeeze the heap so that printf fails on
an allocation, perhaps you want to allocate a large chunk and
then allocate little nibbles until you fail, *THEN* try the
printf call, yes?

Breakpoint 1, main (argc=2, argv=0x7fffffffdd38)
    at ../../tests/test-fprintf-posix3.c:57
57        if (getrlimit (RLIMIT_DATA, &limit) < 0)
(gdb)
59        if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 
MAX_ALLOC_TOTAL)
(gdb)
60          limit.rlim_max = MAX_ALLOC_TOTAL;
(gdb)
61        limit.rlim_cur = limit.rlim_max;
(gdb)
62        if (setrlimit (RLIMIT_DATA, &limit) < 0)
(gdb) p limit
$1 = {rlim_cur = 10000000, rlim_max = 10000000}
(gdb) n
67        if (getrlimit (RLIMIT_AS, &limit) < 0)
(gdb)
69        if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 
MAX_ALLOC_TOTAL)
(gdb)
70          limit.rlim_max = MAX_ALLOC_TOTAL;
(gdb)
71        limit.rlim_cur = limit.rlim_max;
(gdb)
72        if (setrlimit (RLIMIT_AS, &limit) < 0)
(gdb) p limit
$2 = {rlim_cur = 10000000, rlim_max = 10000000}
(gdb) n
76        arg = atoi (argv[1]);
(gdb)
77        if (arg == 0)
(gdb) p arg
$3 = 0
(gdb) n
79            void *memory = malloc (MAX_ALLOC_TOTAL);
(gdb)
80            if (memory == NULL)
(gdb) p memory
$4 = (void *) 0x0



reply via email to

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