mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
Merge pull request #20934 from LasseRosenow/pthread-attr-setstack
sys/posix/pthread: Add pthread_attr_getstack and pthread_attr_setstack
This commit is contained in:
commit
1fc9d1bb82
@ -202,6 +202,33 @@ int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
|
|||||||
*/
|
*/
|
||||||
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
|
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Query set stacksize for new pthread.
|
||||||
|
* @param[in] attr Attribute set to query.
|
||||||
|
* @param[out] stackaddr Pointer to previously assigned stack, or `NULL` for dynamic allocation.
|
||||||
|
* @param[out] stacksize Assigned or default stack size, resp.
|
||||||
|
* @returns 0, this invocation cannot fail
|
||||||
|
*/
|
||||||
|
int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set address and stack size of the stack to use for the new pthread.
|
||||||
|
* @details This function requires setting the address as well as the size
|
||||||
|
* since only setting the address will make the implementation
|
||||||
|
* on some architectures impossible.
|
||||||
|
* If `*stackaddr == NULL`, then the stack is dynamically allocated with malloc().
|
||||||
|
* No two running threads may operate on the same stack.
|
||||||
|
* The stack of a zombie thread (i.e. a non-detached thread that exited but was not yet joined)
|
||||||
|
* may in theory be reused even before joining, though there might be problems
|
||||||
|
* if the stack was preempted before pthread_exit() completed.
|
||||||
|
* @param[in,out] attr Attribute set to operate on.
|
||||||
|
* @param[in] stackaddr Static stack to use, or `NULL` for dynamic allocation.
|
||||||
|
* @param[in] stacksize Size of the stack of the new thread.
|
||||||
|
* Supply `0` to use the default value.
|
||||||
|
* @returns 0, this invocation cannot fail
|
||||||
|
*/
|
||||||
|
int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -158,3 +158,23 @@ int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize)
|
|||||||
attr->ss_size = stacksize;
|
attr->ss_size = stacksize;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize)
|
||||||
|
{
|
||||||
|
int res = pthread_attr_getstackaddr(attr, stackaddr);
|
||||||
|
if (res != 0) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pthread_attr_getstacksize(attr, stacksize);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize)
|
||||||
|
{
|
||||||
|
int res = pthread_attr_setstackaddr(attr, stackaddr);
|
||||||
|
if (res != 0) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pthread_attr_setstacksize(attr, stacksize);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user