Skip to content
Snippets Groups Projects
Commit a4acd2bc authored by Ruud Overeem's avatar Ruud Overeem
Browse files

Bug 1000: Observation will be aborted in a nice way when the process is killed...

Bug 1000: Observation will be aborted in a nice way when the process is killed with -6 (-s SIGABRT).
parent be40d9ca
No related branches found
No related tags found
No related merge requests found
...@@ -155,7 +155,12 @@ void ObservationControl::sigintHandler(int signum) ...@@ -155,7 +155,12 @@ void ObservationControl::sigintHandler(int signum)
// Note we can't call TRAN here because the siginthandler does not know our object. // Note we can't call TRAN here because the siginthandler does not know our object.
if (thisObservationControl) { if (thisObservationControl) {
thisObservationControl->finish(); if (signum == SIGABRT) {
thisObservationControl->abortObservation();
}
else {
thisObservationControl->finish();
}
} }
} }
...@@ -167,6 +172,20 @@ void ObservationControl::finish() ...@@ -167,6 +172,20 @@ void ObservationControl::finish()
TRAN(ObservationControl::finishing_state); TRAN(ObservationControl::finishing_state);
} }
//
// abortObservation
//
void ObservationControl::abortObservation()
{
LOG_WARN("Received manual interrupt to ABORT the observation");
if (itsState < CTState::RESUME) {
itsQuitReason = CT_RESULT_MANUAL_ABORT;
}
itsTimerPort->cancelTimer(itsStopTimer); // cancel old timer
itsStopTimer = itsTimerPort->setTimer(0.0); // expire immediately
// will result in F_TIMER in ::active_state
}
// //
// setState(CTstateNr) // setState(CTstateNr)
// //
...@@ -233,6 +252,7 @@ GCFEvent::TResult ObservationControl::starting_state(GCFEvent& event, ...@@ -233,6 +252,7 @@ GCFEvent::TResult ObservationControl::starting_state(GCFEvent& event,
thisObservationControl = this; thisObservationControl = this;
signal (SIGINT, ObservationControl::sigintHandler); // ctrl-c signal (SIGINT, ObservationControl::sigintHandler); // ctrl-c
signal (SIGTERM, ObservationControl::sigintHandler); // kill signal (SIGTERM, ObservationControl::sigintHandler); // kill
signal (SIGABRT, ObservationControl::sigintHandler); // kill -6
// register what we are doing // register what we are doing
setState(CTState::CONNECT); setState(CTState::CONNECT);
......
...@@ -82,6 +82,7 @@ public: ...@@ -82,6 +82,7 @@ public:
// Interrupt handler for switching to finishing_state when exiting program. // Interrupt handler for switching to finishing_state when exiting program.
static void sigintHandler (int signum); static void sigintHandler (int signum);
void finish (); void finish ();
void abortObservation ();
private: private:
// avoid defaultconstruction and copying // avoid defaultconstruction and copying
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment