aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/android/androiddevice.cpp25
-rw-r--r--src/plugins/android/androiddevice.h3
-rw-r--r--src/plugins/android/androidplugin.cpp1
3 files changed, 17 insertions, 12 deletions
diff --git a/src/plugins/android/androiddevice.cpp b/src/plugins/android/androiddevice.cpp
index 6e6b83eef7e..c8534d1337f 100644
--- a/src/plugins/android/androiddevice.cpp
+++ b/src/plugins/android/androiddevice.cpp
@@ -836,10 +836,11 @@ void AndroidDeviceManager::HandleDevicesListChange(const QString &serialNumber)
}
}
+static AndroidDeviceManager *s_instance = nullptr;
+
AndroidDeviceManager *AndroidDeviceManager::instance()
{
- static AndroidDeviceManager obj;
- return &obj;
+ return s_instance;
}
AndroidDeviceManager::AndroidDeviceManager(QObject *parent)
@@ -847,18 +848,18 @@ AndroidDeviceManager::AndroidDeviceManager(QObject *parent)
m_androidConfig(AndroidConfigurations::currentConfig()),
m_avdManager(m_androidConfig)
{
- connect(qApp, &QCoreApplication::aboutToQuit, this, [this]() {
- if (m_adbDeviceWatcherProcess) {
- m_adbDeviceWatcherProcess->terminate();
- m_adbDeviceWatcherProcess->waitForFinished();
- m_adbDeviceWatcherProcess.reset();
- }
- m_avdsFutureWatcher.waitForFinished();
- m_removeAvdFutureWatcher.waitForFinished();
- });
-
connect(&m_removeAvdFutureWatcher, &QFutureWatcherBase::finished,
this, &AndroidDeviceManager::handleAvdRemoved);
+ QTC_ASSERT(!s_instance, return);
+ s_instance = this;
+}
+
+AndroidDeviceManager::~AndroidDeviceManager()
+{
+ m_avdsFutureWatcher.waitForFinished();
+ m_removeAvdFutureWatcher.waitForFinished();
+ QTC_ASSERT(s_instance == this, return);
+ s_instance = nullptr;
}
// Factory
diff --git a/src/plugins/android/androiddevice.h b/src/plugins/android/androiddevice.h
index e9283df7efe..b3390a9d65e 100644
--- a/src/plugins/android/androiddevice.h
+++ b/src/plugins/android/androiddevice.h
@@ -123,6 +123,7 @@ public:
private:
AndroidDeviceManager(QObject *parent = nullptr);
+ ~AndroidDeviceManager();
void HandleDevicesListChange(const QString &serialNumber);
void HandleAvdsListChange();
void handleAvdRemoved();
@@ -135,6 +136,8 @@ private:
std::unique_ptr<Utils::QtcProcess> m_adbDeviceWatcherProcess;
AndroidConfig &m_androidConfig;
AndroidAvdManager m_avdManager;
+
+ friend class AndroidPluginPrivate;
};
} // namespace Internal
diff --git a/src/plugins/android/androidplugin.cpp b/src/plugins/android/androidplugin.cpp
index 3207b0c38a4..fad354094d6 100644
--- a/src/plugins/android/androidplugin.cpp
+++ b/src/plugins/android/androidplugin.cpp
@@ -136,6 +136,7 @@ public:
};
AndroidBuildApkStepFactory buildApkStepFactory;
+ AndroidDeviceManager deviceManager;
};
AndroidPlugin::~AndroidPlugin()