Skip to content
Snippets Groups Projects
Commit c723f281 authored by hjk's avatar hjk Committed by David Schulz
Browse files

DeviceSupport: Move 'SpecialInterrupt' to base class


Change-Id: Ie8f02128e87744f4260b0defb50473da6d6c508d
Reviewed-by: default avatarDavid Schulz <david.schulz@digia.com>
parent 712af560
Branches
Tags
No related merge requests found
...@@ -72,23 +72,11 @@ void DesktopProcessSignalOperation::interruptProcess(int pid) ...@@ -72,23 +72,11 @@ void DesktopProcessSignalOperation::interruptProcess(int pid)
} }
void DesktopProcessSignalOperation::interruptProcess(const QString &filePath) void DesktopProcessSignalOperation::interruptProcess(const QString &filePath)
{
interruptProcess(filePath, NoSpecialInterrupt);
}
void DesktopProcessSignalOperation::interruptProcess(int pid, SpecialInterrupt specialInterrupt)
{
m_errorMessage.clear();
interruptProcessSilently(pid, specialInterrupt);
}
void DesktopProcessSignalOperation::interruptProcess(const QString &filePath,
SpecialInterrupt specialInterrupt)
{ {
m_errorMessage.clear(); m_errorMessage.clear();
foreach (const DeviceProcessItem &process, Internal::LocalProcessList::getLocalProcesses()) { foreach (const DeviceProcessItem &process, Internal::LocalProcessList::getLocalProcesses()) {
if (process.cmdLine == filePath) if (process.cmdLine == filePath)
interruptProcessSilently(process.pid, specialInterrupt); interruptProcessSilently(process.pid);
} }
emit finished(m_errorMessage); emit finished(m_errorMessage);
} }
...@@ -128,8 +116,7 @@ void DesktopProcessSignalOperation::killProcessSilently(int pid) ...@@ -128,8 +116,7 @@ void DesktopProcessSignalOperation::killProcessSilently(int pid)
#endif // Q_OS_WIN #endif // Q_OS_WIN
} }
void DesktopProcessSignalOperation::interruptProcessSilently( void DesktopProcessSignalOperation::interruptProcessSilently(int pid)
int pid, SpecialInterrupt specialInterrupt)
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
/* /*
...@@ -174,17 +161,16 @@ GDB 32bit | Api | Api | N/A | Win32 ...@@ -174,17 +161,16 @@ GDB 32bit | Api | Api | N/A | Win32
} }
bool creatorIs64Bit = Utils::winIs64BitBinary(qApp->applicationFilePath()); bool creatorIs64Bit = Utils::winIs64BitBinary(qApp->applicationFilePath());
if (!Utils::winIs64BitSystem() || if (!Utils::winIs64BitSystem() ||
specialInterrupt == NoSpecialInterrupt || m_specialInterrupt == NoSpecialInterrupt ||
specialInterrupt == Win64Interrupt && creatorIs64Bit || m_specialInterrupt == Win64Interrupt && creatorIs64Bit ||
specialInterrupt == Win32Interrupt && !creatorIs64Bit) { m_specialInterrupt == Win32Interrupt && !creatorIs64Bit) {
if (!DebugBreakProcess(inferior)) { if (!DebugBreakProcess(inferior)) {
appendMsgCannotInterrupt(pid, tr("DebugBreakProcess failed: ") appendMsgCannotInterrupt(pid, tr("DebugBreakProcess failed: ")
+ Utils::winErrorMessage(GetLastError())); + Utils::winErrorMessage(GetLastError()));
} }
} else if (specialInterrupt == Win32Interrupt } else if (m_specialInterrupt == Win32Interrupt || m_specialInterrupt == Win64Interrupt) {
|| specialInterrupt == Win64Interrupt) {
QString executable = QCoreApplication::applicationDirPath(); QString executable = QCoreApplication::applicationDirPath();
executable += specialInterrupt == Win32Interrupt executable += m_specialInterrupt == Win32Interrupt
? QLatin1String("/win32interrupt.exe") ? QLatin1String("/win32interrupt.exe")
: QLatin1String("/win64interrupt.exe"); : QLatin1String("/win64interrupt.exe");
if (!QFile::exists(executable)) { if (!QFile::exists(executable)) {
...@@ -211,7 +197,6 @@ GDB 32bit | Api | Api | N/A | Win32 ...@@ -211,7 +197,6 @@ GDB 32bit | Api | Api | N/A | Win32
if (inferior != NULL) if (inferior != NULL)
CloseHandle(inferior); CloseHandle(inferior);
#else #else
Q_UNUSED(specialInterrupt)
if (pid <= 0) if (pid <= 0)
appendMsgCannotInterrupt(pid, tr("Invalid process id.")); appendMsgCannotInterrupt(pid, tr("Invalid process id."));
else if (kill(pid, SIGINT)) else if (kill(pid, SIGINT))
......
...@@ -39,19 +39,15 @@ class PROJECTEXPLORER_EXPORT DesktopProcessSignalOperation : public DeviceProces ...@@ -39,19 +39,15 @@ class PROJECTEXPLORER_EXPORT DesktopProcessSignalOperation : public DeviceProces
{ {
Q_OBJECT Q_OBJECT
public: public:
enum SpecialInterrupt { NoSpecialInterrupt, Win32Interrupt, Win64Interrupt };
~DesktopProcessSignalOperation() {} ~DesktopProcessSignalOperation() {}
void killProcess(int pid); void killProcess(int pid);
void killProcess(const QString &filePath); void killProcess(const QString &filePath);
void interruptProcess(int pid); void interruptProcess(int pid);
void interruptProcess(const QString &filePath); void interruptProcess(const QString &filePath);
void interruptProcess(int pid, SpecialInterrupt specialInterrupt);
void interruptProcess(const QString &filePath, SpecialInterrupt specialInterrupt);
private: private:
void killProcessSilently(int pid); void killProcessSilently(int pid);
void interruptProcessSilently(int pid, SpecialInterrupt = NoSpecialInterrupt); void interruptProcessSilently(int pid);
void appendMsgCannotKill(int pid, const QString &why); void appendMsgCannotKill(int pid, const QString &why);
void appendMsgCannotInterrupt(int pid, const QString &why); void appendMsgCannotInterrupt(int pid, const QString &why);
......
...@@ -424,4 +424,9 @@ QString IDevice::defaultPublicKeyFilePath() ...@@ -424,4 +424,9 @@ QString IDevice::defaultPublicKeyFilePath()
return defaultPrivateKeyFilePath() + QLatin1String(".pub"); return defaultPrivateKeyFilePath() + QLatin1String(".pub");
} }
DeviceProcessSignalOperation::DeviceProcessSignalOperation()
: m_specialInterrupt(NoSpecialInterrupt)
{
}
} // namespace ProjectExplorer } // namespace ProjectExplorer
...@@ -59,6 +59,8 @@ class PROJECTEXPLORER_EXPORT DeviceProcessSignalOperation : public QObject ...@@ -59,6 +59,8 @@ class PROJECTEXPLORER_EXPORT DeviceProcessSignalOperation : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
enum SpecialInterrupt { NoSpecialInterrupt, Win32Interrupt, Win64Interrupt };
~DeviceProcessSignalOperation() {} ~DeviceProcessSignalOperation() {}
typedef QSharedPointer<DeviceProcessSignalOperation> Ptr; typedef QSharedPointer<DeviceProcessSignalOperation> Ptr;
...@@ -67,13 +69,16 @@ public: ...@@ -67,13 +69,16 @@ public:
virtual void interruptProcess(int pid) = 0; virtual void interruptProcess(int pid) = 0;
virtual void interruptProcess(const QString &filePath) = 0; virtual void interruptProcess(const QString &filePath) = 0;
void setSpecialInterrupt(SpecialInterrupt si);
signals: signals:
// If the error message is empty the operation was successful // If the error message is empty the operation was successful
void finished(const QString &errorMessage); void finished(const QString &errorMessage);
protected: protected:
explicit DeviceProcessSignalOperation() {} explicit DeviceProcessSignalOperation();
QString m_errorMessage; QString m_errorMessage;
SpecialInterrupt m_specialInterrupt;
}; };
class PROJECTEXPLORER_EXPORT PortsGatheringMethod class PROJECTEXPLORER_EXPORT PortsGatheringMethod
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment