+void Engineer::sighandler(int sig)
+{
+ if(sig==SIGSEGV || sig==SIGILL || sig==SIGFPE || sig==SIGABRT)
+ {
+ signal(sig, SIG_DFL);
+ IO::print(IO::cerr, "Fatal signal received, terminating\n");
+ const map<unsigned, Locomotive *> &locos = control.get_locomotives();
+ for(map<unsigned, Locomotive *>::const_iterator i=locos.begin(); i!=locos.end(); ++i)
+ i->second->set_speed(0);
+ control.flush();
+ raise(sig);
+ }
+ else if(sig==SIGTERM || sig==SIGINT)
+ exit(0);
+}
+