From c1c0f357da40fe5607b0af484255fbf3b51aae7f Mon Sep 17 00:00:00 2001 From: Fawzi Mohamed <fawzi.mohamed@nokia.com> Date: Mon, 23 Apr 2012 18:31:53 +0200 Subject: [PATCH] zeroconf: daemon killall on windows (and linux) Change-Id: Ibbc960d9caf26fb8ff56d37209fe5011931ed3b5 Reviewed-by: Christian Kandeler <christian.kandeler@nokia.com> --- src/libs/zeroconf/embeddedLib.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/libs/zeroconf/embeddedLib.cpp b/src/libs/zeroconf/embeddedLib.cpp index 310c25e909..1e2c3ffe4d 100644 --- a/src/libs/zeroconf/embeddedLib.cpp +++ b/src/libs/zeroconf/embeddedLib.cpp @@ -34,11 +34,12 @@ #include "servicebrowser_p.h" +#include <QCoreApplication> +#include <QDebug> +#include <QFileInfo> #include <QString> #include <QStringList> #include <QProcess> -#include <QCoreApplication> -#include <QDebug> #ifdef Q_OS_LINUX #define EMBEDDED_LIB @@ -87,6 +88,28 @@ public: bool tryStartDaemon() { if (!daemonPath.isEmpty()) { + QFileInfo dPath(daemonPath); + QProcess killall; + bool killAllFailed = false; +#ifdef Q_OS_WIN + QString cmd = QLating1String("taskill /im ") + dPath.fileName() + + QLatin1String(" /f /t"); +#else + QString cmd = QLatin1String("killall ") + dPath.fileName() + + QLatin1String(" 2> /dev/null"); +#endif + killall.start(cmd); + if (!killall.waitForStarted()) { + killAllFailed = true; + } else { + killall.closeWriteChannel(); + killall.waitForFinished(); + } + if (killAllFailed) { + this->setError(false,ZConfLib::tr("zeroconf failed to kill other daemons with '%1'").arg(cmd)); + if (DEBUG_ZEROCONF) + qDebug() << name() << " had an error trying to kill other daemons with " << cmd; + } if (QProcess::startDetached(daemonPath)) { QThread::yieldCurrentThread(); // sleep a bit? -- GitLab