@@ -58,9 +58,8 @@ CHIP_ERROR ChipDeviceScanner::Init(BluezAdapter1 * adapter, ChipDeviceScannerDel
58
58
// Make this function idempotent by shutting down previously initialized state if any.
59
59
Shutdown ();
60
60
61
- mAdapter = BLUEZ_ADAPTER1 (g_object_ref (adapter));
62
- mCancellable = g_cancellable_new ();
63
- mDelegate = delegate;
61
+ mAdapter = BLUEZ_ADAPTER1 (g_object_ref (adapter));
62
+ mDelegate = delegate;
64
63
65
64
// Create the D-Bus object manager client object on the glib thread, so that all D-Bus signals
66
65
// will be delivered to the glib thread.
@@ -73,7 +72,7 @@ CHIP_ERROR ChipDeviceScanner::Init(BluezAdapter1 * adapter, ChipDeviceScannerDel
73
72
self->mManager = g_dbus_object_manager_client_new_for_bus_sync (
74
73
G_BUS_TYPE_SYSTEM, G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE, BLUEZ_INTERFACE, " /" ,
75
74
bluez_object_manager_client_get_proxy_type, nullptr /* unused user data in the Proxy Type Func */ ,
76
- nullptr /* destroy notify */ , self-> mCancellable , &MakeUniquePointerReceiver (err).Get ());
75
+ nullptr /* destroy notify */ , nullptr /* cancellable */ , &MakeUniquePointerReceiver (err).Get ());
77
76
VerifyOrReturnError (self->mManager != nullptr , CHIP_ERROR_INTERNAL,
78
77
ChipLogError (Ble, " Failed to get D-Bus object manager for device scanning: %s" , err->message ));
79
78
return CHIP_NO_ERROR;
@@ -100,8 +99,6 @@ void ChipDeviceScanner::Shutdown()
100
99
g_object_unref (self->mManager );
101
100
if (self->mAdapter != nullptr )
102
101
g_object_unref (self->mAdapter );
103
- if (self->mCancellable != nullptr )
104
- g_object_unref (self->mCancellable );
105
102
return CHIP_NO_ERROR;
106
103
},
107
104
this );
@@ -115,6 +112,7 @@ CHIP_ERROR ChipDeviceScanner::StartScan(System::Clock::Timeout timeout)
115
112
VerifyOrReturnError (mScannerState != ChipDeviceScannerState::SCANNER_SCANNING, CHIP_ERROR_INCORRECT_STATE);
116
113
VerifyOrReturnError (mTimerState == ScannerTimerState::TIMER_CANCELED, CHIP_ERROR_INCORRECT_STATE);
117
114
115
+ mCancellable .reset (g_cancellable_new ());
118
116
if (PlatformMgrImpl ().GLibMatterContextInvokeSync (MainLoopStartScan, this ) != CHIP_NO_ERROR)
119
117
{
120
118
ChipLogError (Ble, " Failed to schedule BLE scan start." );
@@ -191,7 +189,9 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStopScan(ChipDeviceScanner * self)
191
189
{
192
190
GAutoPtr<GError> error;
193
191
194
- g_cancellable_cancel (self->mCancellable ); // in case we are currently running a scan
192
+ // In case we are currently running a scan
193
+ g_cancellable_cancel (self->mCancellable .get ());
194
+ self->mCancellable .reset ();
195
195
196
196
if (self->mObjectAddedSignal )
197
197
{
@@ -303,7 +303,7 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStartScan(ChipDeviceScanner * self)
303
303
g_variant_builder_add (&filterBuilder, " {sv}" , " Transport" , g_variant_new_string (" le" ));
304
304
GVariant * filter = g_variant_builder_end (&filterBuilder);
305
305
306
- if (!bluez_adapter1_call_set_discovery_filter_sync (self->mAdapter , filter, self->mCancellable ,
306
+ if (!bluez_adapter1_call_set_discovery_filter_sync (self->mAdapter , filter, self->mCancellable . get () ,
307
307
&MakeUniquePointerReceiver (error).Get ()))
308
308
{
309
309
// Not critical: ignore if fails
@@ -312,7 +312,8 @@ CHIP_ERROR ChipDeviceScanner::MainLoopStartScan(ChipDeviceScanner * self)
312
312
}
313
313
314
314
ChipLogProgress (Ble, " BLE initiating scan." );
315
- if (!bluez_adapter1_call_start_discovery_sync (self->mAdapter , self->mCancellable , &MakeUniquePointerReceiver (error).Get ()))
315
+ if (!bluez_adapter1_call_start_discovery_sync (self->mAdapter , self->mCancellable .get (),
316
+ &MakeUniquePointerReceiver (error).Get ()))
316
317
{
317
318
ChipLogError (Ble, " Failed to start discovery: %s" , error->message );
318
319
return CHIP_ERROR_INTERNAL;
0 commit comments