Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Force use of thread contexts when running fortran code.
[simgrid.git] / src / smpi / smpi_global.c
index 86b1a09..b8938fa 100644 (file)
@@ -75,10 +75,10 @@ int smpi_process_argc(void) {
   return data->argc ? *(data->argc) - 1 : 0;
 }
 
-int smpi_process_getarg(int* index, char* dst, size_t len) {
+int smpi_process_getarg(integer* index, char* dst, ftnlen len) {
   smpi_process_data_t data = smpi_process_data();
   char* arg;
-  size_t i;
+  ftnlen i;
 
   if(!data->argc || !data->argv
      || *index < 1 || *index >= *(data->argc)) {
@@ -227,10 +227,12 @@ void smpi_global_destroy(void)
 /* With smpiff, the following weak symbols are replaced by those in libf2c */
 int __attribute__((weak)) xargc;
 char** __attribute__((weak)) xargv;
+int fortran = 1;
 
 int __attribute__((weak)) main(int argc, char** argv) {
    xargc = argc;
    xargv = argv;
+   fortran = 0;
    return MAIN__();
 }
 
@@ -256,6 +258,12 @@ int MAIN__(void)
                    xbt_cfgelm_double, &default_threshold, 1, 1, NULL,
                    NULL);
 
+  if(fortran) {
+    /* Force thread contexts with fortran code */
+    extern void SIMIX_ctx_thread_factory_init(smx_context_factory_t *factory);
+    smx_factory_initializer_to_use = SIMIX_ctx_thread_factory_init;
+  }
+
 #ifdef HAVE_TRACING
   TRACE_global_init(&xargc, xargv);
 #endif