Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mcapi::snapshot_equal() called in insert_acceptance_pair()
[simgrid.git] / src / simix / smx_global.cpp
index 164ddcac32c97ba632b5099931507ca473660edc..0c95e0745d083f8a5e157dc1a2fbdd7ddc221efc 100644 (file)
@@ -85,7 +85,7 @@ static void segvhandler(int signum, siginfo_t* siginfo, void* /*context*/)
   std::raise(signum);
 }
 
-unsigned char sigsegv_stack[SIGSTKSZ]; /* alternate stack for SIGSEGV handler */
+std::array<unsigned char, SIGSTKSZ> sigsegv_stack; /* alternate stack for SIGSEGV handler */
 
 /**
  * Install signal handler for SIGSEGV.  Check that nobody has already installed
@@ -93,13 +93,9 @@ unsigned char sigsegv_stack[SIGSTKSZ]; /* alternate stack for SIGSEGV handler */
  */
 static void install_segvhandler()
 {
-  stack_t stack;
   stack_t old_stack;
-  stack.ss_sp = sigsegv_stack;
-  stack.ss_size = sizeof sigsegv_stack;
-  stack.ss_flags = 0;
 
-  if (sigaltstack(&stack, &old_stack) == -1) {
+  if (simgrid::kernel::context::Context::install_sigsegv_stack(&old_stack, true) == -1) {
     XBT_WARN("Failed to register alternate signal stack: %s", strerror(errno));
     return;
   }
@@ -503,7 +499,7 @@ void SIMIX_run()
        */
 
       for (auto const& actor : simix_global->actors_that_ran) {
-        if (actor->simcall_.call_ != SIMCALL_NONE) {
+        if (actor->simcall_.call_ != simgrid::simix::Simcall::NONE) {
           actor->simcall_handle(0);
         }
       }