mirror of
https://github.com/fluencelabs/musl
synced 2025-06-28 14:11:56 +00:00
add pthread_attr_setstack interface (and get)
i originally omitted these (optional, per POSIX) interfaces because i considered them backwards implementation details. however, someone later brought to my attention a fairly legitimate use case: allocating thread stacks in memory that's setup for sharing and/or fast transfer between CPU and GPU so that the thread can move data to a GPU directly from automatic-storage buffers without having to go through additional buffer copies. perhaps there are other situations in which these interfaces are useful too.
This commit is contained in:
14
src/thread/pthread_attr_setstack.c
Normal file
14
src/thread/pthread_attr_setstack.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include "pthread_impl.h"
|
||||
|
||||
/* pthread_key_create.c overrides this */
|
||||
static const size_t dummy = 0;
|
||||
weak_alias(dummy, __pthread_tsd_size);
|
||||
|
||||
int pthread_attr_setstack(pthread_attr_t *a, void *addr, size_t size)
|
||||
{
|
||||
if (size-PTHREAD_STACK_MIN-__pthread_tsd_size > SIZE_MAX/4)
|
||||
return EINVAL;
|
||||
a->_a_stackaddr = (size_t)addr + size;
|
||||
a->_a_stacksize = size - DEFAULT_STACK_SIZE;
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user