pthread_attr_setguardsize()
Set the size of the thread's guard area
Synopsis:
#include <pthread.h>
int pthread_attr_setguardsize(
pthread_attr_t* attr,
size_t guardsize );
Arguments:
- attr
- A pointer to the pthread_attr_t structure that defines the attributes to use when creating new threads. For more information, see pthread_attr_init().
- guardsize
- The new value for the size of the thread's guard area.
Library:
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
Description:
The pthread_attr_setguardsize() function sets the size of the thread's guard area in the attribute structure attr to guardsize.
If guardsize is 0, threads created with attr have no guard area; otherwise, a guard area of at least guardsize bytes is provided. You can get the default guardsize value by specifying _SC_PAGESIZE in a call to sysconf().
The guardsize attribute controls the size of the guard area for the thread's stack. This guard area helps protect against stack overflows; guardsize bytes of extra memory is allocated at the overflow end of the stack. If a thread overflows into this buffer, it receives a SIGSEGV signal.
The guardsize attribute is provided because:
- Stack overflow protection can waste system resources. An application that creates many threads can save system resources by turning off guard areas if it trusts its threads not to overflow the stack.
- When threads allocate large objects on the stack, a large guardsize is required to detect stack overflows.
Returns:
The pthread_attr_setguardsize() function always returns EOK.
Classification:
Safety: | |
---|---|
Cancellation point | No |
Signal handler | Yes |
Thread | Yes |
Caveats:
If you provide a stack (using attr's stackaddr attribute; see pthread_attr_setstackaddr()), the guardsize is ignored, and there's no stack overflow protection for that thread.
The guardsize argument is completely ignored when using a physical mode memory manager.