Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix default context factory.
[simgrid.git] / src / simix / smx_context.c
index ba6d03f..c05ef67 100644 (file)
@@ -1,6 +1,6 @@
 /* a fast and simple context switching library                              */
 
-/* Copyright (c) 2009 - 2011. The SimGrid Team.
+/* Copyright (c) 2009-2013. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -36,6 +36,11 @@ static e_xbt_parmap_mode_t smx_parallel_synchronization_mode = XBT_PARMAP_DEFAUL
  */
 void SIMIX_context_mod_init(void)
 {
+#if defined(CONTEXT_THREADS) && !defined(HAVE_THREAD_LOCAL_STORAGE)
+  /* the __thread storage class is not available on this platform:
+   * use getspecific/setspecific instead to store the current context in each thread */
+  xbt_os_thread_key_create(&smx_current_context_key);
+#endif
   if (!simix_global->context_factory) {
     /* select the context factory to use to create the contexts */
     if (smx_factory_initializer_to_use) {
@@ -43,7 +48,8 @@ void SIMIX_context_mod_init(void)
     }
     else { /* use the factory specified by --cfg=contexts/factory:value */
 
-    if (smx_context_factory_name == NULL) {
+    if (smx_context_factory_name == NULL ||
+        !strcmp(smx_context_factory_name, "default")) {
         /* use the default factory */
   #ifdef HAVE_RAWCTX
       SIMIX_ctx_raw_factory_init(&simix_global->context_factory);
@@ -86,16 +92,10 @@ void SIMIX_context_mod_init(void)
       }
     }
   }
-
-#if defined(CONTEXT_THREADS) && !defined(HAVE_THREAD_LOCAL_STORAGE)
-  /* the __thread storage class is not available on this platform:
-   * use getspecific/setspecific instead to store the current context in each thread */
-  xbt_os_thread_key_create(&smx_current_context_key);
-#endif
 }
 
 /**
- * This function is call by SIMIX_clean() to finalize the context module.
+ * This function is called by SIMIX_clean() to finalize the context module.
  */
 void SIMIX_context_mod_exit(void)
 {
@@ -138,7 +138,6 @@ XBT_INLINE int SIMIX_context_get_nthreads(void) {
  * \param nb_threads the number of threads to use
  */
 XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) {
-
   if (nb_threads<=0) {  
      nb_threads = xbt_os_get_numcores();
      XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads);
@@ -149,7 +148,6 @@ XBT_INLINE void SIMIX_context_set_nthreads(int nb_threads) {
     THROWF(arg_error, 0, "The thread factory cannot be run in parallel");
 #endif
   }
   smx_parallel_contexts = nb_threads;
 }