Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Include surf_resource.h, for surf_resource_name().
[simgrid.git] / src / simix / smx_context.c
index 9fc1b5d..ec51170 100644 (file)
@@ -39,7 +39,7 @@ void SIMIX_context_mod_init(void)
   if (!simix_global->context_factory) {
     /* select the context factory to use to create the contexts */
     if (smx_factory_initializer_to_use) {
-      (*smx_factory_initializer_to_use)(&(simix_global->context_factory));
+      smx_factory_initializer_to_use(&simix_global->context_factory);
     }
     else { /* use the factory specified by --cfg=contexts/factory:value */
 
@@ -70,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.");
       }
     }
   }
@@ -92,7 +104,7 @@ void SIMIX_context_mod_exit(void)
 
     /* finalize the context factory */
     finalize_factory = simix_global->context_factory->finalize;
-    (*finalize_factory) (&simix_global->context_factory);
+    finalize_factory(&simix_global->context_factory);
   }
   xbt_dict_remove((xbt_dict_t) _surf_cfg_set,"contexts/factory");
 }