History

make sure AC PID is valid before acting on process

Stephen Birarda committed 11 years ago

Commit d10095e1 parent c4c6e721 file · +16 −10Browse files

Showing the changes to assignment-client/src/AssignmentClientMonitor.cpp (1 of 1 file). Show all

Unified · Split

assignment-client/src/AssignmentClientMonitor.cpp+16−10
@@ -95,8 +95,10 @@ void AssignmentClientMonitor::stopChildProcesses() { · 94 unmodified lines
9595
9696 // ask child processes to terminate
9797 foreach(QProcess* childProcess, _childProcesses) {
98− qDebug() << "Attempting to terminate child process" << childProcess->processId();
99− childProcess->terminate();
98+ if (childProcess->processId() > 0) {
99+ qDebug() << "Attempting to terminate child process" << childProcess->processId();
100+ childProcess->terminate();
101+ }
100102 }
101103
102104 simultaneousWaitOnChildren(WAIT_FOR_CHILD_MSECS);
@@ -104,8 +106,10 @@ void AssignmentClientMonitor::stopChildProcesses() { · 1 unmodified line
104106 if (_childProcesses.size() > 0) {
105107 // ask even more firmly
106108 foreach(QProcess* childProcess, _childProcesses) {
107− qDebug() << "Attempting to kill child process" << childProcess->processId();
108− childProcess->kill();
109+ if (childProcess->processId() > 0) {
110+ qDebug() << "Attempting to kill child process" << childProcess->processId();
111+ childProcess->kill();
112+ }
109113 }
110114
111115 simultaneousWaitOnChildren(WAIT_FOR_CHILD_MSECS);
@@ -155,12 +159,14 @@ void AssignmentClientMonitor::spawnChildClient() { · 43 unmodified lines
155159 assignmentClient->setProcessChannelMode(QProcess::ForwardedChannels);
156160
157161 assignmentClient->start(QCoreApplication::applicationFilePath(), _childArguments);
158−
159− // make sure we hear that this process has finished when it does
160− connect(assignmentClient, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(childProcessFinished()));
161−
162− qDebug() << "Spawned a child client with PID" << assignmentClient->pid();
163− _childProcesses.insert(assignmentClient->processId(), assignmentClient);
162+
163+ if (assignmentClient->processId() > 0) {
164+ // make sure we hear that this process has finished when it does
165+ connect(assignmentClient, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(childProcessFinished()));
166+
167+ qDebug() << "Spawned a child client with PID" << assignmentClient->processId();
168+ _childProcesses.insert(assignmentClient->processId(), assignmentClient);
169+ }
164170 }
165171
166172 void AssignmentClientMonitor::checkSpares() {