*/
static void install_segvhandler()
{
- if (simgrid::kernel::context::Context::install_sigsegv_stack(nullptr, true) == -1) {
+ if (simgrid::kernel::context::Context::install_sigsegv_stack(true) == -1) {
XBT_WARN("Failed to register alternate signal stack: %s", strerror(errno));
return;
}
thread_local Context* Context::current_context_ = nullptr;
/* Install or disable alternate signal stack, for SIGSEGV handler. */
-int Context::install_sigsegv_stack(stack_t* old_stack, bool enable)
+int Context::install_sigsegv_stack(bool enable)
{
static std::vector<unsigned char> sigsegv_stack(SIGSTKSZ);
stack_t stack;
stack.ss_sp = sigsegv_stack.data();
stack.ss_size = sigsegv_stack.size();
stack.ss_flags = enable ? 0 : SS_DISABLE;
- return sigaltstack(&stack, old_stack);
+ return sigaltstack(&stack, nullptr);
}
Context* Context::self()
void declare_context(std::size_t size);
public:
- static int install_sigsegv_stack(stack_t* old_stack, bool enable);
+ static int install_sigsegv_stack(bool enable);
Context(std::function<void()>&& code, actor::ActorImpl* actor, bool maestro);
Context(const Context&) = delete;
{
Context::set_current(context);
- install_sigsegv_stack(nullptr, true);
+ install_sigsegv_stack(true);
// Tell the caller (normally the maestro) we are starting, and wait for its green light
context->end_.release();
context->start();
// Signal to the caller (normally the maestro) that we have finished:
context->yield();
- install_sigsegv_stack(nullptr, false);
+ install_sigsegv_stack(false);
XBT_DEBUG("Terminating");
Context::set_current(nullptr);
}