pthread_attr_setstackaddr()

Updated: April 19, 2023

Set the thread stack address attribute

Synopsis:

#include <pthread.h>

int pthread_attr_setstackaddr( pthread_attr_t * attr,
                               void * stackaddr );

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().
stackaddr
A pointer to the block of memory that you want a new thread to use as its stack.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The pthread_attr_setstackaddr() function sets the thread stack address attribute in the attribute object attr to stackaddr. If you call this function, you must also call pthread_attr_setstacksize() to set the stack size. Or, you can call pthread_attr_setstack() to set both attributes at the same time.

The default value for the thread stack address attribute is NULL. A thread created with a NULL stack address attribute will have a stack dynamically allocated by the system of minimum size PTHREAD_STACK_MIN. If the system allocates a stack, it reclaims the space when the thread terminates. If you allocate a stack, you must free it.

Note:
  • If you provide a stack, the guardsize member of the pthread_attr_t structure is ignored, and there's no automatic stack overflow protection for the thread. You can provide overflow protection by creating an inaccessible guard page at the end of the stack (i.e. immediately before the lowest address). By inaccessible, we mean it should be assigned the PROT_NONE access type; for more information, see the mmap() reference.
  • If you provide a stack, take into consideration that the system takes up approximately 256 bytes.
  • The system uses some of the provided stack for objects such as TLS and an initial stack frame, so less than the entire buffer is available to the thread.

Returns:

EOK
Success.

Classification:

Standard Unix; removed from POSIX.1-2008

Safety:  
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

Caveats:

The QNX Neutrino interpretation of PTHREAD_STACK_MIN is enough memory to run a thread that does nothing:

void nothingthread( void )
{
    return;
}