From 30211618ccd3a03539bcaadb138a36d95151989d Mon Sep 17 00:00:00 2001 From: Sagar Dhawan Date: Thu, 5 Aug 2021 12:40:54 -0700 Subject: [PATCH] Fix a race in CHIPDeviceController while shutting down (#8803) --- src/darwin/Framework/CHIP/CHIPDeviceController.mm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/darwin/Framework/CHIP/CHIPDeviceController.mm b/src/darwin/Framework/CHIP/CHIPDeviceController.mm index 19ee0166e6ee48..642ef219042a4c 100644 --- a/src/darwin/Framework/CHIP/CHIPDeviceController.mm +++ b/src/darwin/Framework/CHIP/CHIPDeviceController.mm @@ -49,8 +49,6 @@ @interface CHIPDeviceController () -@property (nonatomic, readonly, strong, nonnull) NSRecursiveLock * lock; - // queue used to serialize all work performed by the CHIPDeviceController @property (atomic, readonly) dispatch_queue_t chipWorkQueue; @@ -377,9 +375,10 @@ - (BOOL)getConnectedDevice:(uint64_t)deviceID queue:(dispatch_queue_t)queue completionHandler:(CHIPDeviceConnectionCallback)completionHandler { + __block CHIP_ERROR errorCode = CHIP_ERROR_INCORRECT_STATE; if (![self isRunning]) { NSError * error; - [self checkForError:CHIP_ERROR_INCORRECT_STATE logMsg:kErrorNotRunning error:&error]; + [self checkForError:errorCode logMsg:kErrorNotRunning error:&error]; dispatch_async(queue, ^{ completionHandler(nil, error); }); @@ -387,8 +386,10 @@ - (BOOL)getConnectedDevice:(uint64_t)deviceID } dispatch_async(_chipWorkQueue, ^{ - CHIPDeviceConnectionBridge * connectionBridge = new CHIPDeviceConnectionBridge(completionHandler, queue); - CHIP_ERROR errorCode = connectionBridge->connect(self->_cppCommissioner, deviceID); + if ([self isRunning]) { + CHIPDeviceConnectionBridge * connectionBridge = new CHIPDeviceConnectionBridge(completionHandler, queue); + errorCode = connectionBridge->connect(self->_cppCommissioner, deviceID); + } NSError * error; if ([self checkForError:errorCode logMsg:kErrorGetPairedDevice error:&error]) {