From 9004e89bb902a709c3d61c7f168d2d39fe2cd936 Mon Sep 17 00:00:00 2001
From: Alex Blasche <alexander.blasche@qt.io>
Date: Wed, 29 Aug 2018 16:24:00 +0200
Subject: [PATCH] Ensure that local services have state LocalService

and invalidate the state once they have been disconnected. This affects
Android, Bluez and Apple code lines.

Change-Id: I2b87577930b6ae78e7ef7ef061e597beba946594
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
---
 src/bluetooth/qlowenergycontroller_osx.mm  | 1 +
 src/bluetooth/qlowenergycontrollerbase.cpp | 9 +++++----
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/bluetooth/qlowenergycontroller_osx.mm b/src/bluetooth/qlowenergycontroller_osx.mm
index 46782a22..d01686ae 100644
--- a/src/bluetooth/qlowenergycontroller_osx.mm
+++ b/src/bluetooth/qlowenergycontroller_osx.mm
@@ -1372,6 +1372,7 @@ QLowEnergyService *QLowEnergyController::addService(const QLowEnergyServiceData
 
     if (const auto servicePrivate = [osx_d_ptr->peripheralManager addService:data]) {
         servicePrivate->setController(osx_d_ptr);
+        servicePrivate->state = QLowEnergyService::LocalService;
         osx_d_ptr->discoveredServices.insert(servicePrivate->uuid, servicePrivate);
         return new QLowEnergyService(servicePrivate, parent);
     }
diff --git a/src/bluetooth/qlowenergycontrollerbase.cpp b/src/bluetooth/qlowenergycontrollerbase.cpp
index bfdd61a6..86108648 100644
--- a/src/bluetooth/qlowenergycontrollerbase.cpp
+++ b/src/bluetooth/qlowenergycontrollerbase.cpp
@@ -255,10 +255,11 @@ quint16 QLowEnergyControllerPrivate::updateValueOfDescriptor(
 
 void QLowEnergyControllerPrivate::invalidateServices()
 {
-    for (QSharedPointer<QLowEnergyServicePrivate> service : serviceList.values()) {
+    for (QSharedPointer<QLowEnergyServicePrivate> service : serviceList.values())
+        service->setController(nullptr);
+
+    for (QSharedPointer<QLowEnergyServicePrivate> service : localServices.values())
         service->setController(nullptr);
-        service->setState(QLowEnergyService::InvalidService);
-    }
 
     serviceList.clear();
     localServices.clear();
@@ -273,8 +274,8 @@ QLowEnergyService *QLowEnergyControllerPrivate::addServiceHelper(
     // for it.
 
     const auto servicePrivate = QSharedPointer<QLowEnergyServicePrivate>::create();
-    servicePrivate->state = QLowEnergyService::LocalService;
     servicePrivate->setController(this);
+    servicePrivate->state = QLowEnergyService::LocalService;
     servicePrivate->uuid = service.uuid();
     servicePrivate->type = service.type() == QLowEnergyServiceData::ServiceTypePrimary
             ? QLowEnergyService::PrimaryService : QLowEnergyService::IncludedService;
-- 
GitLab