forked from qt-creator/qt-creator
Assert that we are starting a valid process launcher executable
Change-Id: I48b18bd4ce821d59622de77c602677303c9d7625 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -25,8 +25,10 @@
|
|||||||
|
|
||||||
#include "launcherinterface.h"
|
#include "launcherinterface.h"
|
||||||
|
|
||||||
|
#include "filepath.h"
|
||||||
#include "launcherpackets.h"
|
#include "launcherpackets.h"
|
||||||
#include "launchersocket.h"
|
#include "launchersocket.h"
|
||||||
|
#include "qtcassert.h"
|
||||||
|
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@@ -91,6 +93,7 @@ public:
|
|||||||
Internal::LauncherSocket *socket() const { return m_socket; }
|
Internal::LauncherSocket *socket() const { return m_socket; }
|
||||||
|
|
||||||
void setPathToLauncher(const QString &path) { if (!path.isEmpty()) m_pathToLauncher = path; }
|
void setPathToLauncher(const QString &path) { if (!path.isEmpty()) m_pathToLauncher = path; }
|
||||||
|
QString launcherFilePath() const { return m_pathToLauncher + QLatin1String("/qtcreator_processlauncher"); }
|
||||||
signals:
|
signals:
|
||||||
void errorOccurred(const QString &error);
|
void errorOccurred(const QString &error);
|
||||||
|
|
||||||
@@ -132,8 +135,7 @@ void LauncherInterfacePrivate::doStart()
|
|||||||
this, &LauncherInterfacePrivate::handleProcessFinished);
|
this, &LauncherInterfacePrivate::handleProcessFinished);
|
||||||
connect(m_process, &QProcess::readyReadStandardError,
|
connect(m_process, &QProcess::readyReadStandardError,
|
||||||
this, &LauncherInterfacePrivate::handleProcessStderr);
|
this, &LauncherInterfacePrivate::handleProcessStderr);
|
||||||
const QString launcherPath = m_pathToLauncher + QLatin1String("/qtcreator_processlauncher");
|
m_process->start(launcherFilePath(), QStringList(m_server->fullServerName()));
|
||||||
m_process->start(launcherPath, QStringList(m_server->fullServerName()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LauncherInterfacePrivate::doStop()
|
void LauncherInterfacePrivate::doStop()
|
||||||
@@ -208,13 +210,23 @@ LauncherInterface::~LauncherInterface()
|
|||||||
m_thread.wait();
|
m_thread.wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called from main thread
|
||||||
void LauncherInterface::startLauncher(const QString &pathToLauncher)
|
void LauncherInterface::startLauncher(const QString &pathToLauncher)
|
||||||
{
|
{
|
||||||
|
LauncherInterface &iface = instance();
|
||||||
|
iface.m_private->setPathToLauncher(pathToLauncher);
|
||||||
|
const FilePath launcherFilePath = FilePath::fromString(iface.m_private->launcherFilePath())
|
||||||
|
.cleanPath().withExecutableSuffix();
|
||||||
|
auto launcherIsNotExecutable = [&launcherFilePath]() {
|
||||||
|
qWarning() << "The Creator's process launcher"
|
||||||
|
<< launcherFilePath << "is not executable.";
|
||||||
|
};
|
||||||
|
QTC_ASSERT(launcherFilePath.isExecutableFile(), launcherIsNotExecutable());
|
||||||
// Call in launcher's thread.
|
// Call in launcher's thread.
|
||||||
instance().m_private->setPathToLauncher(pathToLauncher);
|
QMetaObject::invokeMethod(iface.m_private, &LauncherInterfacePrivate::doStart);
|
||||||
QMetaObject::invokeMethod(instance().m_private, &LauncherInterfacePrivate::doStart);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called from main thread
|
||||||
void LauncherInterface::stopLauncher()
|
void LauncherInterface::stopLauncher()
|
||||||
{
|
{
|
||||||
// Call in launcher's thread.
|
// Call in launcher's thread.
|
||||||
|
|||||||
@@ -40,9 +40,6 @@ class QTCREATOR_UTILS_EXPORT LauncherInterface : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
static LauncherInterface &instance();
|
|
||||||
~LauncherInterface() override;
|
|
||||||
|
|
||||||
static void startLauncher(const QString &pathToLauncher = {});
|
static void startLauncher(const QString &pathToLauncher = {});
|
||||||
static void stopLauncher();
|
static void stopLauncher();
|
||||||
static Internal::LauncherSocket *socket();
|
static Internal::LauncherSocket *socket();
|
||||||
@@ -52,6 +49,8 @@ signals:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
LauncherInterface();
|
LauncherInterface();
|
||||||
|
static LauncherInterface &instance();
|
||||||
|
~LauncherInterface() override;
|
||||||
|
|
||||||
QThread m_thread;
|
QThread m_thread;
|
||||||
Internal::LauncherInterfacePrivate *m_private;
|
Internal::LauncherInterfacePrivate *m_private;
|
||||||
|
|||||||
Reference in New Issue
Block a user