Kill RunWorker start/stop watchdog times in case of reportFailure

Change-Id: I2eb4d9667482edbaafe6bf780a94e440c2d39881
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Filipe Azevedo <filipe.azevedo@kdab.com>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2017-11-10 12:55:10 +01:00
parent 2d9aa5596d
commit 7c26e3336f

View File

@@ -560,6 +560,40 @@ public:
bool canStop() const; bool canStop() const;
void timerEvent(QTimerEvent *ev) override; void timerEvent(QTimerEvent *ev) override;
void killStartWatchdog()
{
if (startWatchdogTimerId != -1) {
killTimer(startWatchdogTimerId);
startWatchdogTimerId = -1;
}
}
void killStopWatchdog()
{
if (stopWatchdogTimerId != -1) {
killTimer(stopWatchdogTimerId);
stopWatchdogTimerId = -1;
}
}
void startStartWatchdog()
{
killStartWatchdog();
killStopWatchdog();
if (startWatchdogInterval != 0)
startWatchdogTimerId = startTimer(startWatchdogInterval);
}
void startStopWatchdog()
{
killStopWatchdog();
killStartWatchdog();
if (stopWatchdogInterval != 0)
stopWatchdogTimerId = startTimer(stopWatchdogInterval);
}
RunWorker *q; RunWorker *q;
RunWorkerState state = RunWorkerState::Initialized; RunWorkerState state = RunWorkerState::Initialized;
const QPointer<RunControl> runControl; const QPointer<RunControl> runControl;
@@ -1573,17 +1607,21 @@ bool RunWorkerPrivate::canStop() const
void RunWorkerPrivate::timerEvent(QTimerEvent *ev) void RunWorkerPrivate::timerEvent(QTimerEvent *ev)
{ {
if (ev->timerId() == startWatchdogTimerId) { if (ev->timerId() == startWatchdogTimerId) {
if (startWatchdogCallback) if (startWatchdogCallback) {
killStartWatchdog();
startWatchdogCallback(); startWatchdogCallback();
else } else {
q->reportFailure(RunWorker::tr("Worker start timed out.")); q->reportFailure(RunWorker::tr("Worker start timed out."));
}
return; return;
} }
if (ev->timerId() == stopWatchdogTimerId) { if (ev->timerId() == stopWatchdogTimerId) {
if (stopWatchdogCallback) if (stopWatchdogCallback) {
killStopWatchdog();
stopWatchdogCallback(); stopWatchdogCallback();
else } else {
q->reportFailure(RunWorker::tr("Worker stop timed out.")); q->reportFailure(RunWorker::tr("Worker stop timed out."));
}
return; return;
} }
} }
@@ -1641,9 +1679,8 @@ RunWorker::~RunWorker()
*/ */
void RunWorker::initiateStart() void RunWorker::initiateStart()
{ {
if (d->startWatchdogInterval != 0) d->startStartWatchdog();
d->startWatchdogTimerId = d->startTimer(d->startWatchdogInterval); d->runControl->d->debugMessage("Initiate start for " + d->id);
start(); start();
} }
@@ -1655,8 +1692,7 @@ void RunWorker::initiateStart()
*/ */
void RunWorker::reportStarted() void RunWorker::reportStarted()
{ {
if (d->startWatchdogInterval != 0) d->killStartWatchdog();
d->killTimer(d->startWatchdogTimerId);
d->runControl->d->onWorkerStarted(this); d->runControl->d->onWorkerStarted(this);
emit started(); emit started();
} }
@@ -1669,9 +1705,7 @@ void RunWorker::reportStarted()
*/ */
void RunWorker::initiateStop() void RunWorker::initiateStop()
{ {
if (d->stopWatchdogInterval != 0) d->startStopWatchdog();
d->stopWatchdogTimerId = d->startTimer(d->stopWatchdogInterval);
d->runControl->d->debugMessage("Initiate stop for " + d->id); d->runControl->d->debugMessage("Initiate stop for " + d->id);
stop(); stop();
} }
@@ -1687,8 +1721,7 @@ void RunWorker::initiateStop()
*/ */
void RunWorker::reportStopped() void RunWorker::reportStopped()
{ {
if (d->stopWatchdogInterval != 0) d->killStopWatchdog();
d->killTimer(d->stopWatchdogTimerId);
d->runControl->d->onWorkerStopped(this); d->runControl->d->onWorkerStopped(this);
emit stopped(); emit stopped();
} }
@@ -1702,6 +1735,8 @@ void RunWorker::reportStopped()
*/ */
void RunWorker::reportDone() void RunWorker::reportDone()
{ {
d->killStartWatchdog();
d->killStopWatchdog();
switch (d->state) { switch (d->state) {
case RunWorkerState::Initialized: case RunWorkerState::Initialized:
QTC_CHECK(false); QTC_CHECK(false);
@@ -1727,6 +1762,8 @@ void RunWorker::reportDone()
*/ */
void RunWorker::reportFailure(const QString &msg) void RunWorker::reportFailure(const QString &msg)
{ {
d->killStartWatchdog();
d->killStopWatchdog();
d->runControl->d->onWorkerFailed(this, msg); d->runControl->d->onWorkerFailed(this, msg);
} }