Re: Too low PTHREAD_STACK_MIN value?

From: Ed Maste <emaste_at_freebsd.org>
Date: Thu, 21 Jan 2016 11:02:30 -0500
On 11 March 2014 at 20:38, David Chisnall <theraven_at_freebsd.org> wrote:
> On 12 Mar 2014, at 02:07, Roger Pau Monné <roger.pau_at_citrix.com> wrote:
>
>> I've found out that the value PTHREAD_STACK_MIN is currently set (2048
>> bytes) seems to be way too low
>
> This looks like an error in your code.  The spec says:
>
>> PTHREAD_STACK_MIN
>> Minimum size in bytes of thread stack storage.
>> Minimum Acceptable Value: 0
>
> It is meant to be the minimum value that the system can give for a thread stack.  The purpose of this constant is for languages that do their own stack management bit some chain of activation records of segmented stacks, but want to use pthreads for threading, so that they can allocate the smallest possible stack that allows pthread cleanup to work.
>
> Using it from C code is very likely to be a mistake.

I found that lang/polyml uses PTHREAD_STACK_MIN for a trivial signal
handler thread it creates[1]. They found it was too small and
implemented a 4K minimum bound to fix polyml on FreeBSD[2]. Even if
this isn't really the intended use of PTHREAD_STACK_MIN it suggests
the 2K x86 minimum may indeed be too low.

I ran into this while trying LLVM's libunwind, which requires more
stack space. 2K is certainly too low with LLVM libunwind. Is it
reasonable to just increase it to say 8K?

[1] https://github.com/polyml/polyml/blob/6c8add163fc39271da1056e43387a3d33ebd62c6/libpolyml/sighandler.cpp#L527
[2] https://github.com/polyml/polyml/commit/c59360ba74ac99bd9e3d342af214ced39cf0568b
Received on Thu Jan 21 2016 - 15:02:50 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:02 UTC