diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp --- a/core/backends/lan/lanlinkprovider.cpp +++ b/core/backends/lan/lanlinkprovider.cpp @@ -67,6 +67,7 @@ QNetworkConfigurationManager* networkManager = new QNetworkConfigurationManager(this); connect(networkManager, &QNetworkConfigurationManager::configurationChanged, this, &LanLinkProvider::onNetworkConfigurationChanged); + this->moveToThread(&m_thread); } void LanLinkProvider::onNetworkConfigurationChanged(const QNetworkConfiguration& config) @@ -101,6 +102,9 @@ } onNetworkChange(); + onStartedFinishedMutex.lock(); + onStartedFinished.wakeAll(); + onStartedFinishedMutex.unlock(); } void LanLinkProvider::onStop() diff --git a/core/backends/linkprovider.h b/core/backends/linkprovider.h --- a/core/backends/linkprovider.h +++ b/core/backends/linkprovider.h @@ -22,6 +22,9 @@ #define LINKPROVIDER_H #include +#include +#include +#include #include "core/networkpacket.h" #include "pairinghandler.h" @@ -45,6 +48,10 @@ virtual QString name() = 0; virtual int priority() = 0; + QThread m_thread; + QWaitCondition onStartedFinished; + QMutex onStartedFinishedMutex; + public Q_SLOTS: virtual void onStart() = 0; virtual void onStop() = 0; diff --git a/core/backends/linkprovider.cpp b/core/backends/linkprovider.cpp --- a/core/backends/linkprovider.cpp +++ b/core/backends/linkprovider.cpp @@ -20,8 +20,13 @@ #include "linkprovider.h" +#include + +#include + LinkProvider::LinkProvider() { - //gcc complains if we don't add something to compile on a class with virtual functions + m_thread.start(); + qRegisterMetaType("NetworkPacket"); } diff --git a/core/daemon.cpp b/core/daemon.cpp --- a/core/daemon.cpp +++ b/core/daemon.cpp @@ -90,7 +90,10 @@ for (LinkProvider* a : qAsConst(d->m_linkProviders)) { connect(a, &LinkProvider::onConnectionReceived, this, &Daemon::onNewDeviceLink); - a->onStart(); + a->onStartedFinishedMutex.lock(); + QMetaObject::invokeMethod(a, "onStart"); + a->onStartedFinished.wait(&(a->onStartedFinishedMutex)); + a->onStartedFinishedMutex.unlock(); } //Register on DBus