Bug#727009: make x finited hard limit of stacksize
Petr Salinger
Petr.Salinger at seznam.cz
Thu Nov 7 08:07:33 UTC 2013
ulimit -S of stack size:
linux-i386: 8 MB
linux-amd64: 8 MB
kfreebsd-i386: 8 MB
kfreebsd-amd64: 8 MB
ulimit -H of stack size:
linux-i386: unlimited
linux-amd64: unlimited
kfreebsd-i386: 64 MB
kfreebsd-amd64: 512 MB
*******************************
>From {nptl/fbtl}/nptl-init.c
/* Determine the default allowed stack size. This is the size used
in case the user does not specify one. */
struct rlimit limit;
if (getrlimit (RLIMIT_STACK, &limit) != 0
|| limit.rlim_cur == RLIM_INFINITY)
/* The system limit is not usable. Use an architecture-specific
default. */
limit.rlim_cur = ARCH_STACK_DEFAULT_SIZE;
else if (limit.rlim_cur < PTHREAD_STACK_MIN)
/* The system limit is unusably small.
Use the minimal size acceptable. */
limit.rlim_cur = PTHREAD_STACK_MIN;
...
2.17:
__default_stacksize = limit.rlim_cur;
2.18:
__default_pthread_attr.stacksize = limit.rlim_cur;
For {linux,kfreebsd}-{i386,amd64}
PTHREAD_STACK_MIN 16 KB
ARCH_STACK_DEFAULT_SIZE 2 MB
*******************************
The make raises soft limit of stack size to hard limit of stack size.
*******************************
As a result of above, under linux, each thread needs only 2 MB for
its stack, while under kfreebsd each thread needs virtual space for
either 64 MB or 512 MB.
It looks like reasonable approach will be to put also upper bound
to __default_stacksize, let say to 4*ARCH_STACK_DEFAULT_SIZE (= 4*2MB)
Petr
More information about the pkg-gnome-maintainers
mailing list