@@ -23,17 +23,14 @@ void EngineRepresentation::setSlaveProcess(QProcess * slaveProcess)
2323 _slaveFinishedConnection = connect (_slaveProcess, QOverload<int , QProcess::ExitStatus>::of (&QProcess::finished), this , &EngineRepresentation::processFinished);
2424}
2525
26- EngineRepresentation::~EngineRepresentation ()
26+ void EngineRepresentation::killProcess ()
2727{
28- Log::log () << " ~EngineRepresentation() Engine #" << _channelNumber << std::endl;
29-
30-
3128 if (_slaveProcess && _slaveProcess->state () == QProcess::ProcessState::Running)
3229 {
33- _slaveProcess->terminate ();
34- _slaveProcess->kill ();
30+ try { _slaveProcess->terminate (); } catch (...) {}
31+ try { _slaveProcess->kill (); } catch (...) {}
3532 }
36-
33+
3734 if (_slaveProcess)
3835 {
3936 _slaveProcess->setParent (nullptr );
@@ -42,6 +39,13 @@ EngineRepresentation::~EngineRepresentation()
4239 }
4340}
4441
42+ EngineRepresentation::~EngineRepresentation ()
43+ {
44+ Log::log () << " ~EngineRepresentation() Engine #" << _channelNumber << std::endl;
45+
46+ killProcess ();
47+ }
48+
4549void EngineRepresentation::cleanUpAfterClose (bool forgetAnalyses)
4650{
4751 disconnect (_analysisInProgressStatusConnection); // Just in case
@@ -720,9 +724,7 @@ void EngineRepresentation::killEngine(bool beCareful)
720724 // I want pause and resume all engines to be done in a single function call without returning to the eventloop, so we just disconnect "finished" if we want to kill the engine.
721725 disconnect (_slaveProcess, QOverload<int , QProcess::ExitStatus>::of (&QProcess::finished), this , &EngineRepresentation::processFinished);
722726
723- _slaveProcess->kill ();
724- _slaveProcess->deleteLater ();
725- _slaveProcess = nullptr ;
727+ killProcess ();
726728 }
727729
728730 EngineRepresentation::processFinished ();
@@ -793,9 +795,7 @@ void EngineRepresentation::restartEngine(QProcess * jaspEngineProcess)
793795 if (jaspEngineStillRunning ())
794796 shutEngineDown ();
795797
796- _slaveProcess->kill ();
797- _slaveProcess->deleteLater ();
798- _slaveProcess = nullptr ;
798+ killProcess ();
799799
800800 if (_engineState != engineState::killed && _engineState != engineState::stopped)
801801 Log::log () << " EngineRepresentation::restartEngine says: Engine already had jaspEngine process that is now replaced!" << std::endl;
0 commit comments