/**
* @file exithandlers.cc
* @brief Definitions for exit handlers
*/
#include "exithandlers.h"
#include <csignal>
#include "common.h"
#include "util.h"
#include "interact.h"
#include "errormsg.h"
#include "vm.h"
#ifdef HAVE_LIBFFTW3
#include "fftw++.h"
#endif
void interruptHandler(int)
{
#ifdef HAVE_LIBFFTW3
fftwpp::saveWisdom();
#endif
em.Interrupt(true);
}
int returnCode()
{
return em.processStatus() || interact::interactive ? 0 : 1;
}
void exitHandler(int)
{
#if defined(HAVE_READLINE) && defined(HAVE_LIBCURSES)
rl_cleanup_after_signal();
#endif
exit(returnCode());
}
void signalHandler(int)
{
// Print the position and trust the shell to print an error message.
em.runtime(vm::getPos());
#if !defined(_WIN32)
Signal(SIGBUS,SIG_DFL);
#endif
Signal(SIGFPE,SIG_DFL);
}
void hangup_handler(int sig)
{
}