Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Initialize default thread attrs in xbt_os_thread_mod_preinit.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Wed, 12 Mar 2014 14:06:10 +0000 (15:06 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Mon, 17 Mar 2014 09:41:46 +0000 (10:41 +0100)
src/xbt/xbt_os_thread.c

index ff9d996..2754faf 100644 (file)
@@ -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)