Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
fix 32bits builds
[simgrid.git] / src / simix / smx_global.cpp
index a6e990c..27dea37 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2007-2017. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
@@ -92,10 +91,6 @@ static void segvhandler(int signum, siginfo_t *siginfo, void *context)
                     "Minimal Working Example (MWE) reproducing your problem and a full backtrace\n"
                     "of the fault captured with gdb or valgrind.\n",
             smx_context_stack_size / 1024);
-    if (XBT_LOG_ISENABLED(simix_kernel, xbt_log_priority_debug)) {
-      fprintf(stderr, "siginfo = {si_signo = %d, si_errno = %d, si_code = %d, si_addr = %p}\n",
-              siginfo->si_signo, siginfo->si_errno, siginfo->si_code, siginfo->si_addr);
-    }
   } else  if (siginfo->si_signo == SIGSEGV) {
     fprintf(stderr, "Segmentation fault.\n");
 #if HAVE_SMPI
@@ -119,7 +114,8 @@ char sigsegv_stack[SIGSTKSZ];   /* alternate stack for SIGSEGV handler */
  */
 static void install_segvhandler()
 {
-  stack_t stack, old_stack;
+  stack_t stack;
+  stack_t old_stack;
   stack.ss_sp = sigsegv_stack;
   stack.ss_size = sizeof sigsegv_stack;
   stack.ss_flags = 0;
@@ -134,7 +130,8 @@ static void install_segvhandler()
     sigaltstack(&old_stack, nullptr);
   }
 
-  struct sigaction action, old_action;
+  struct sigaction action;
+  struct sigaction old_action;
   action.sa_sigaction = &segvhandler;
   action.sa_flags = SA_ONSTACK | SA_RESETHAND | SA_SIGINFO;
   sigemptyset(&action.sa_mask);
@@ -235,7 +232,7 @@ void SIMIX_global_init(int *argc, char **argv)
     });
 
     simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::Storage* storage) {
-      const char* name = storage->getName();
+      const char* name = storage->cname();
       // TODO, create sg_storage_by_name
       sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, name);
       xbt_assert(s != nullptr, "Storage not found for name %s", name);
@@ -544,7 +541,15 @@ void SIMIX_run()
     /* Clean processes to destroy */
     SIMIX_process_empty_trash();
 
-    XBT_DEBUG("### time %f, empty %d", time, xbt_dynar_is_empty(simix_global->process_to_run));
+    XBT_DEBUG("### time %f, #processes %zu, #to_run %lu", time, simix_global->process_list.size(),
+              xbt_dynar_length(simix_global->process_to_run));
+
+    /* If only daemon processes remain, cancel their actions, mark them to die and reschedule them */
+    if (simix_global->process_list.size() == simix_global->daemons.size())
+      for (const auto& dmon : simix_global->daemons) {
+        XBT_DEBUG("Kill %s", dmon->cname());
+        SIMIX_process_kill(dmon, simix_global->maestro_process);
+      }
 
     if (xbt_dynar_is_empty(simix_global->process_to_run) &&
         !simix_global->process_list.empty())
@@ -560,6 +565,7 @@ void SIMIX_run()
     SIMIX_display_process_status();
     xbt_abort();
   }
+  simgrid::s4u::onSimulationEnd();
 }
 
 /**