diff --git a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm index f47d4b2b401176..4b7dc4e1de0fe8 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController_XPC.mm @@ -73,13 +73,15 @@ @implementation MTRDeviceController_XPC - (void)_updateRegistrationInfo { dispatch_async(self.workQueue, ^{ + std::lock_guard lock(*self.deviceMapLock); + NSMutableDictionary * registrationInfo = [NSMutableDictionary dictionary]; NSMutableDictionary * controllerContext = [NSMutableDictionary dictionary]; NSMutableArray * nodeIDs = [NSMutableArray array]; for (NSNumber * nodeID in [self.nodeIDToDeviceMap keyEnumerator]) { - MTRDevice * device = [self _deviceForNodeID:nodeID createIfNeeded:NO]; + MTRDevice * device = self.nodeIDToDeviceMap[nodeID]; if ([device delegateExists]) { NSMutableDictionary * nodeDictionary = [NSMutableDictionary dictionary]; MTR_REQUIRED_ATTRIBUTE(MTRDeviceControllerRegistrationNodeIDKey, nodeID, nodeDictionary)