Skip to content

Commit 354923b

Browse files
boutinbJorisGoosen
authored andcommitted
Kill safely the engine
1 parent f50f5b3 commit 354923b

File tree

2 files changed

+14
-13
lines changed

2 files changed

+14
-13
lines changed

Desktop/engine/enginerepresentation.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
4549
void 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;

Desktop/engine/enginerepresentation.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ public slots:
195195
void handleEngineCrash();
196196
void abortAnalysisInProgress(bool restartAfterwards);
197197
void addSettingsToJson(Json::Value & msg);
198+
void killProcess();
198199

199200
IPCChannel * channel() { return emit channelSignal(_channelNumber); }
200201

0 commit comments

Comments
 (0)