@@ -228,24 +228,38 @@ - (void)clearAllResumptionInfo
228
228
// Can we do less dispatch? We would need to have a version of
229
229
// _findResumptionInfoWithKey that assumes we are already on the right queue.
230
230
for (NSNumber * nodeID in _nodesWithResumptionInfo) {
231
- auto * oldInfo = [self findResumptionInfoByNodeID: nodeID];
232
- if (oldInfo != nil ) {
233
- dispatch_sync (_storageDelegateQueue, ^{
234
- [_storageDelegate controller: controller
235
- removeValueForKey: ResumptionByResumptionIDKey (oldInfo.resumptionID)
236
- securityLevel: MTRStorageSecurityLevelSecure
237
- sharingType: MTRStorageSharingTypeNotShared];
238
- [_storageDelegate controller: controller
239
- removeValueForKey: ResumptionByNodeIDKey (oldInfo.nodeID)
240
- securityLevel: MTRStorageSecurityLevelSecure
241
- sharingType: MTRStorageSharingTypeNotShared];
242
- });
243
- }
231
+ [self _clearResumptionInfoForNodeID: nodeID controller: controller];
244
232
}
245
233
246
234
[_nodesWithResumptionInfo removeAllObjects ];
247
235
}
248
236
237
+ - (void )clearResumptionInfoForNodeID : (NSNumber *)nodeID
238
+ {
239
+ MTRDeviceController * controller = _controller;
240
+ VerifyOrReturn (controller != nil ); // No way to call delegate without controller.
241
+
242
+ [self _clearResumptionInfoForNodeID: nodeID controller: controller];
243
+ [_nodesWithResumptionInfo removeObject: nodeID];
244
+ }
245
+
246
+ - (void )_clearResumptionInfoForNodeID : (NSNumber *)nodeID controller : (MTRDeviceController *)controller
247
+ {
248
+ auto * oldInfo = [self findResumptionInfoByNodeID: nodeID];
249
+ if (oldInfo != nil ) {
250
+ dispatch_sync (_storageDelegateQueue, ^{
251
+ [_storageDelegate controller: controller
252
+ removeValueForKey: ResumptionByResumptionIDKey (oldInfo.resumptionID)
253
+ securityLevel: MTRStorageSecurityLevelSecure
254
+ sharingType: MTRStorageSharingTypeNotShared];
255
+ [_storageDelegate controller: controller
256
+ removeValueForKey: ResumptionByNodeIDKey (oldInfo.nodeID)
257
+ securityLevel: MTRStorageSecurityLevelSecure
258
+ sharingType: MTRStorageSharingTypeNotShared];
259
+ });
260
+ }
261
+ }
262
+
249
263
- (CHIP_ERROR)storeLastLocallyUsedNOC : (MTRCertificateTLVBytes)noc
250
264
{
251
265
MTRDeviceController * controller = _controller;
@@ -1169,6 +1183,20 @@ - (void)storeDeviceData:(NSDictionary<NSString *, id> *)data forNodeID:(NSNumber
1169
1183
});
1170
1184
}
1171
1185
1186
+ - (void )clearDeviceDataForNodeID : (NSNumber *)nodeID
1187
+ {
1188
+ dispatch_async (_storageDelegateQueue, ^{
1189
+ MTRDeviceController * controller = self->_controller ;
1190
+ VerifyOrReturn (controller != nil ); // No way to call delegate without controller.
1191
+
1192
+ // Ignore store failures, since they are not actionable for us here.
1193
+ [self ->_storageDelegate controller: controller
1194
+ removeValueForKey: [self _deviceDataKeyForNodeID: nodeID]
1195
+ securityLevel: MTRStorageSecurityLevelSecure
1196
+ sharingType: MTRStorageSharingTypeNotShared];
1197
+ });
1198
+ }
1199
+
1172
1200
- (void )synchronouslyPerformBlock : (void (^_Nullable)(void ))block
1173
1201
{
1174
1202
dispatch_sync (_storageDelegateQueue, ^{
0 commit comments