From 610b1adbe0668d5e2f337a33269bc99d5fe22e1f Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Wed, 12 Mar 2014 15:06:10 +0100 Subject: [PATCH] Initialize default thread attrs in xbt_os_thread_mod_preinit. --- src/xbt/xbt_os_thread.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/xbt/xbt_os_thread.c b/src/xbt/xbt_os_thread.c index ff9d996ee3..2754fafa29 100644 --- a/src/xbt/xbt_os_thread.c +++ b/src/xbt/xbt_os_thread.c @@ -54,10 +54,9 @@ static xbt_os_thread_t main_thread = NULL; static pthread_key_t xbt_self_thread_key; static int thread_mod_inited = 0; -/* attribute structure to handle pthread stack size changing */ +/* defaults attribute for pthreads */ //FIXME: find where to put this -static pthread_attr_t attr; -static int thread_attr_inited = 0; +static pthread_attr_t thread_attr; /* frees the xbt_os_thread_t corresponding to the current thread */ static void xbt_os_thread_free_thread_data(xbt_os_thread_t thread) @@ -105,11 +104,12 @@ void xbt_os_thread_mod_preinit(void) if ((errcode = pthread_setspecific(xbt_self_thread_key, main_thread))) THROWF(system_error, errcode, "pthread_setspecific failed for xbt_self_thread_key"); - __xbt_running_ctx_fetch = _os_thread_get_running_ctx; __xbt_ex_terminate = _os_thread_ex_terminate; + pthread_attr_init(&thread_attr); + thread_mod_inited = 1; #ifndef HAVE_SEM_INIT @@ -182,7 +182,7 @@ xbt_os_thread_t xbt_os_thread_create(const char *name, XBT_RUNNING_CTX_INITIALIZE(res_thread->running_ctx); res_thread->extra_data = extra_data; - if ((errcode = pthread_create(&(res_thread->t), thread_attr_inited!=0? &attr: NULL, + if ((errcode = pthread_create(&(res_thread->t), &thread_attr, wrapper_start_routine, res_thread))) THROWF(system_error, errcode, "pthread_create failed: %s", strerror(errcode)); @@ -202,8 +202,7 @@ void xbt_os_thread_setstacksize(int stack_size) xbt_die("stack size %d is negative, maybe it exceeds MAX_INT?", stack_size); sz = stack_size; - pthread_attr_init(&attr); - res = pthread_attr_setstacksize(&attr, sz); + res = pthread_attr_setstacksize(&thread_attr, sz); #ifdef PTHREAD_STACK_MIN if (res == EINVAL) { @@ -214,7 +213,7 @@ void xbt_os_thread_setstacksize(int stack_size) XBT_DEBUG("pthread_attr_setstacksize failed for %#zx, try again with %#zx", sz, sz2); sz = sz2; - res = pthread_attr_setstacksize(&attr, sz); + res = pthread_attr_setstacksize(&thread_attr, sz); } } #endif @@ -223,7 +222,6 @@ void xbt_os_thread_setstacksize(int stack_size) XBT_WARN("invalid stack size (maybe too big): %#zx", sz); else if (res != 0) XBT_WARN("unknown error %d in pthread stacksize setting: %#zx", res, sz); - thread_attr_inited = 1; } const char *xbt_os_thread_name(xbt_os_thread_t t) -- 2.20.1