Fix error handling when killing Windows processes.

Similar to Unix.

Change-Id: I967da0eb461e63505e4b47b5fcf6de0df6256e94
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Friedemann Kleint
2012-08-24 09:09:44 +02:00
committed by hjk
parent 5a895d4fe5
commit 9ffe031060
2 changed files with 19 additions and 21 deletions

View File

@@ -126,17 +126,18 @@ void LocalProcessList::doKillProcess(const DeviceProcess &process)
const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
|PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
const HANDLE handle = OpenProcess(rights, FALSE, process.pid);
if (!handle) {
qWarning("Cannot open process %d: %s" , process.pid,
qPrintable(Utils::winErrorMessage(GetLastError())));
return;
m_error.clear();
if (const HANDLE handle = OpenProcess(rights, FALSE, process.pid)) {
if (!TerminateProcess(handle, UINT(-1))) {
m_error = tr("Cannot terminate process %1: %2").
arg(process.pid).arg(Utils::winErrorMessage(GetLastError()));
}
CloseHandle(handle);
} else {
m_error = tr("Cannot open process %1: %2").
arg(process.pid).arg(Utils::winErrorMessage(GetLastError()));
}
if (!TerminateProcess(handle, UINT(-1))) {
qWarning("Cannot terminate process %d: %s" , process.pid,
qPrintable(Utils::winErrorMessage(GetLastError())));
}
CloseHandle(handle);
QTimer::singleShot(0, this, SLOT(reportDelayedKillStatus()));
}
#endif //Q_OS_WIN
@@ -255,13 +256,6 @@ void LocalProcessList::doKillProcess(const DeviceProcess &process)
QTimer::singleShot(0, this, SLOT(reportDelayedKillStatus()));
}
void LocalProcessList::reportDelayedKillStatus()
{
if (m_error.isEmpty())
reportProcessKilled();
else
reportError(m_error);
}
#endif // QT_OS_UNIX
Qt::ItemFlags LocalProcessList::flags(const QModelIndex &index) const
@@ -282,5 +276,13 @@ void LocalProcessList::doUpdate()
QTimer::singleShot(0, this, SLOT(handleUpdate()));
}
void LocalProcessList::reportDelayedKillStatus()
{
if (m_error.isEmpty())
reportProcessKilled();
else
reportError(m_error);
}
} // namespace Internal
} // namespace RemoteLinux

View File

@@ -57,15 +57,11 @@ private:
private slots:
void handleUpdate();
#ifdef Q_OS_UNIX
void reportDelayedKillStatus();
#endif
private:
const qint64 m_myPid;
#ifdef Q_OS_UNIX
QString m_error;
#endif
};
} // namespace Internal