28 ABTI_thread_attr *p_newattr;
29 int abt_errno =
ABTU_malloc(
sizeof(ABTI_thread_attr), (
void **)&p_newattr);
30 ABTI_CHECK_ERROR(abt_errno);
33 ABTI_thread_attr_init(p_newattr, NULL,
gp_ABTI_global->thread_stacksize,
34 ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK,
ABT_TRUE);
35 *newattr = ABTI_thread_attr_get_handle(p_newattr);
54 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(h_attr);
55 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
87 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
88 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
90 ABTI_thread_type new_thread_type;
91 if (stackaddr != NULL) {
92 if (((uintptr_t)stackaddr & 0x7) != 0) {
95 new_thread_type = ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC;
98 new_thread_type = ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK;
100 new_thread_type = ABTI_THREAD_TYPE_MEM_MALLOC_DESC_STACK;
104 p_attr->thread_type &= ~ABTI_THREAD_TYPES_MEM;
105 p_attr->thread_type |= new_thread_type;
107 p_attr->p_stack = stackaddr;
108 p_attr->stacksize = stacksize;
131 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
132 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
134 *stackaddr = p_attr->p_stack;
135 *stacksize = p_attr->stacksize;
153 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
154 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
157 p_attr->stacksize = stacksize;
158 ABTI_thread_type new_thread_type;
160 new_thread_type = ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK;
162 new_thread_type = ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK;
165 p_attr->thread_type &= ~ABTI_THREAD_TYPES_MEM;
166 p_attr->thread_type |= new_thread_type;
184 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
185 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
187 *stacksize = p_attr->stacksize;
209 #ifndef ABT_CONFIG_DISABLE_MIGRATION
210 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
211 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
214 p_attr->f_cb = cb_func;
215 p_attr->p_cb_arg = cb_arg;
240 #ifndef ABT_CONFIG_DISABLE_MIGRATION
241 ABTI_thread_attr *p_attr = ABTI_thread_attr_get_ptr(attr);
242 ABTI_CHECK_NULL_THREAD_ATTR_PTR(p_attr);
245 p_attr->migratable = flag;
256 void ABTI_thread_attr_print(ABTI_thread_attr *p_attr, FILE *p_os,
int indent)
258 if (p_attr == NULL) {
259 fprintf(p_os,
"%*sULT attr: [NULL ATTR]\n", indent,
"");
261 const char *stacktype;
262 if (p_attr->thread_type & ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC) {
263 stacktype =
"MEMPOOL_DESC";
264 }
else if (p_attr->thread_type & ABTI_THREAD_TYPE_MEM_MALLOC_DESC) {
265 stacktype =
"MALLOC_DESC";
266 }
else if (p_attr->thread_type &
267 ABTI_THREAD_TYPE_MEM_MEMPOOL_DESC_STACK) {
268 stacktype =
"MEMPOOL_DESC_STACK";
269 }
else if (p_attr->thread_type &
270 ABTI_THREAD_TYPE_MEM_MALLOC_DESC_STACK) {
271 stacktype =
"MALLOC_DESC_STACK";
273 stacktype =
"UNKNOWN";
275 #ifndef ABT_CONFIG_DISABLE_MIGRATION
284 indent,
"", p_attr->p_stack, p_attr->stacksize, stacktype,
285 (p_attr->migratable ==
ABT_TRUE ?
"TRUE" :
"FALSE"),
294 indent,
"", p_attr->p_stack, p_attr->stacksize, stacktype);
300 ABTU_ret_err int ABTI_thread_attr_dup(
const ABTI_thread_attr *p_attr,
301 ABTI_thread_attr **pp_dup_attr)
303 ABTI_thread_attr *p_dup_attr;
304 int abt_errno =
ABTU_malloc(
sizeof(ABTI_thread_attr), (
void **)&p_dup_attr);
305 ABTI_CHECK_ERROR(abt_errno);
307 memcpy(p_dup_attr, p_attr,
sizeof(ABTI_thread_attr));
308 *pp_dup_attr = p_dup_attr;
struct ABT_thread_attr_opaque * ABT_thread_attr
int ABT_thread_attr_set_stacksize(ABT_thread_attr attr, size_t stacksize) ABT_API_PUBLIC
Set the stack size in the attribute object.
int ABT_thread_attr_set_stack(ABT_thread_attr attr, void *stackaddr, size_t stacksize) ABT_API_PUBLIC
Set stack attributes.
int ABT_thread_attr_set_migratable(ABT_thread_attr attr, ABT_bool flag) ABT_API_PUBLIC
Set the ULT's migratability in the attribute object.
int ABT_thread_attr_get_stacksize(ABT_thread_attr attr, size_t *stacksize) ABT_API_PUBLIC
Get the stack size from the attribute object.
int ABT_thread_attr_set_callback(ABT_thread_attr attr, void(*cb_func)(ABT_thread thread, void *cb_arg), void *cb_arg) ABT_API_PUBLIC
Set callback function and its argument in the attribute object.
static ABTU_ret_err int ABTU_malloc(size_t size, void **p_ptr)
int ABT_thread_attr_create(ABT_thread_attr *newattr) ABT_API_PUBLIC
Create a new ULT attribute object.
struct ABT_thread_opaque * ABT_thread
ABTI_global * gp_ABTI_global
#define ABT_THREAD_ATTR_NULL
int ABT_thread_attr_get_stack(ABT_thread_attr attr, void **stackaddr, size_t *stacksize) ABT_API_PUBLIC
Get stack attributes.
int ABT_thread_attr_free(ABT_thread_attr *attr) ABT_API_PUBLIC
Free the ULT attribute object.
#define ABT_ERR_FEATURE_NA
static void ABTU_free(void *ptr)