diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2015-07-05 16:51:37 +0300 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2015-07-05 16:51:37 +0300 |
commit | a54bc198b16635956d1ac94595e8abdee10a2e60 (patch) | |
tree | c462e339fc5ccee751d12ea4bfea9c16c5ebe6cd /winsup/doc | |
parent | e426213a88e060ae3d739a8d9fe2f3e7e0432e43 (diff) |
Implement correct RLIMIT_STACK handling
* miscfuncs.cc (struct pthread_wrapper_arg): Add member guardsize.
(pthread_wrapper): Set thread stack guarantee according to guardsize.
Tweak assembler code so that $rax/$eax is not required by GCC to
prepare the wrapper_arg value.
(CygwinCreateThread): Fix deadzone handling. Drop setting a "POSIX"
guardpage (aka page w/ PAGE_NOACCESS). Always use Windows guard
pages instead. On post-XP systems (providing SetThreadStackGuarantee)
always set up stack Windows like with reserved/commited areas and
movable guard pages. Only on XP set up stack fully commited if the
guardpage size is not the default system guardpage size.
Fill out pthread_wrapper_arg::guardsize. Improve comments.
* resource.cc: Implement RSTACK_LIMIT Linux-like.
(DEFAULT_STACKSIZE): New macro.
(DEFAULT_STACKGUARD): Ditto.
(rlimit_stack_guard): New muto.
(rlimit_stack): New global variable holding current RSTACK_LIMIT values.
(__set_rlimit_stack): Set rlimit_stack under lock.
(__get_rlimit_stack): Initialize rlimit_stack from executable header
and return rlimit_stack values under lock.
(get_rlimit_stack): Filtering function to return useful default
stacksize from rlimit_stack.rlim_cur value.
(getrlimit): Call __get_rlimit_stack in RLIMIT_STACK case.
(setrlimit): Call __set_rlimit_stack in RLIMIT_STACK case.
* thread.cc (pthread::create): Fetch default stacksize calling
get_rlimit_stack.
(pthread_attr::pthread_attr): Fetch default guardsize calling
wincap.def_guard_page_size.
(pthread_attr_getstacksize): Fetch default stacksize calling
get_rlimit_stack.
* thread.h (PTHREAD_DEFAULT_STACKSIZE): Remove.
(PTHREAD_DEFAULT_GUARDSIZE): Remove.
(get_rlimit_stack): Declare.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
Diffstat (limited to 'winsup/doc')
-rw-r--r-- | winsup/doc/new-features.xml | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml index be3e3892f..c52574ce4 100644 --- a/winsup/doc/new-features.xml +++ b/winsup/doc/new-features.xml @@ -9,6 +9,14 @@ <itemizedlist mark="bullet"> <listitem><para> +Handle pthread stacksizes as in GLibc: Default to RLIMIT_STACK resource. +Allow to set RLIMIT_STACK via setrlimit. Default RLIMIT_STACK to value +from executable header as described on the MSDN website +<ulink url="https://msdn.microsoft.com/en-us/library/windows/desktop/ms686774.aspx">Thread Stack Size</ulink> +Default stacksize to 2 Megs in case RLIMIT_STACK is set to RLIM_INFINITY. +</para></listitem> + +<listitem><para> First cut of an implementation to allow signal handlers running on an alternate signal stack. </para></listitem> |