Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
First bricks for auto_restart support in SIMIX/MSG.
[simgrid.git] / src / simix / smx_deployment.c
index 6c7d332..a25155a 100644 (file)
@@ -19,6 +19,8 @@ static char *parse_host = NULL;
 static double start_time = 0.0;
 static double kill_time = -1.0;
 
+static int auto_restart = 0;
+
 extern int surf_parse_lineno;
 
 static void parse_process_init(void)
@@ -33,10 +35,10 @@ static void parse_process_init(void)
   parse_argv = xbt_new(char *, 2);
   parse_argv[0] = xbt_strdup(A_surfxml_process_function);
   parse_argc = 1;
-  start_time= surf_parse_get_double(A_surfxml_process_start_time);
-  kill_time = surf_parse_get_double(A_surfxml_process_kill_time);
+  start_time = surf_parse_get_double(A_surfxml_process_start_time);
+  kill_time  = surf_parse_get_double(A_surfxml_process_kill_time);
+  auto_restart = A_surfxml_process_on_failure == A_surfxml_process_on_failure_DIE ? 0 : 1;
 }
-
 static void parse_argument(void)
 {
   parse_argv = xbt_realloc(parse_argv, (parse_argc + 2) * sizeof(char *));
@@ -48,6 +50,7 @@ static void parse_process_finalize(void)
   smx_process_arg_t arg = NULL;
   smx_process_t process = NULL;
   parse_argv[parse_argc] = NULL;
+
   if (start_time > SIMIX_get_clock()) {
     arg = xbt_new0(s_smx_process_arg_t, 1);
     arg->name = parse_argv[0];
@@ -68,22 +71,22 @@ static void parse_process_finalize(void)
     if (simix_global->create_process_function)
       simix_global->create_process_function(&process,
                                             parse_argv[0],
-                                            parse_code, NULL,
-                                            parse_host, parse_argc,
+                                            parse_code,
+                                            NULL,
+                                            parse_host,
+                                            kill_time,
+                                            parse_argc,
                                             parse_argv,
-                                            current_property_set);
+                                            current_property_set,
+                                            auto_restart);
     else
-      simcall_process_create(&process, parse_argv[0], parse_code, NULL, parse_host, parse_argc, parse_argv,
-                               current_property_set);
+      simcall_process_create(&process, parse_argv[0], parse_code, NULL, parse_host, kill_time, parse_argc, parse_argv,
+                               current_property_set,auto_restart);
+
     /* verify if process has been created (won't be the case if the host is currently dead, but that's fine) */
     if (!process) {
       return;
     }
-    if (kill_time > SIMIX_get_clock()) {
-      if (simix_global->kill_process_function) {
-        SIMIX_timer_set(start_time, simix_global->kill_process_function, process);
-      }
-    }
   }
   current_property_set = NULL;
 }
@@ -120,11 +123,11 @@ void SIMIX_launch_application(const char *file)
 
   surf_parse_open(file);
   TRY {
-         parse_status = surf_parse();
-         surf_parse_close();
-         xbt_assert(!parse_status, "Parse error at %s:%d", file,surf_parse_lineno);
+    parse_status = surf_parse();
+    surf_parse_close();
+    xbt_assert(!parse_status, "Parse error at %s:%d", file,surf_parse_lineno);
   } CATCH(e) {
-         xbt_die("Unrecoverable error at %s:%d: %s",
+    xbt_die("Unrecoverable error at %s:%d: %s",
                   file, surf_parse_lineno, e.msg);
   }
 }