Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
more informative error message when an invalid context factory is selected
[simgrid.git] / src / simix / smx_context.c
index ca29ef5..7e0b7e5 100644 (file)
@@ -43,15 +43,17 @@ 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) {
         /* use the default factory */
-#ifdef CONTEXT_UCONTEXT
-        SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
-#else
-        SIMIX_ctx_thread_factory_init(&simix_global->context_factory);
-#endif
-      }
-      else if (!strcmp(smx_context_factory_name, "ucontext")) {
+       #ifdef HAVE_RAWCTX
+       SIMIX_ctx_raw_factory_init(&simix_global->context_factory);
+       #elif CONTEXT_UCONTEXT
+               SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
+       #else
+               SIMIX_ctx_thread_factory_init(&simix_global->context_factory);
+       #endif
+    }
+    else if (!strcmp(smx_context_factory_name, "ucontext")) {
         /* use ucontext */
 #ifdef CONTEXT_UCONTEXT
         SIMIX_ctx_sysv_factory_init(&simix_global->context_factory);
@@ -68,7 +70,19 @@ void SIMIX_context_mod_init(void)
        SIMIX_ctx_raw_factory_init(&simix_global->context_factory);
       }
       else {
-        xbt_die("Invalid context factory specified");
+        XBT_ERROR("Invalid context factory specified. Valid factories on this machine:");
+#ifdef HAVE_RAWCTX
+        XBT_ERROR("  raw: high performance context factory implemented specifically for SimGrid");
+#else
+        XBT_ERROR("  (raw contextes are disabled at compilation time on this machine -- check configure logs for details)");
+#endif
+#ifdef CONTEXT_UCONTEXT
+        XBT_ERROR("  ucontext: classical system V contextes (implemented with makecontext, swapcontext and friends)");
+#else
+        XBT_ERROR("  (ucontext is disabled at compilation time on this machine -- check configure logs for details)");
+#endif
+        XBT_ERROR("  thread: slow portability layer using system threads (pthreads on UNIX, CreateThread() on windows)");
+        xbt_die("Please use a valid factory.");
       }
     }
   }