@@ -276,20 +276,49 @@ void GetTextEntries(unsigned short txtLen, uint8_t * txtRecord, std::vector<chip
276
276
}
277
277
}
278
278
279
+ static void HandleResolveTask (intptr_t context)
280
+ {
281
+ ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
282
+ auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(context);
283
+ if (!rCtx)
284
+ {
285
+ ChipLogError (DeviceLayer, " Null context in HandleResolveTask" );
286
+ return ;
287
+ }
288
+
289
+ {
290
+ chip::DeviceLayer::StackLock lock;
291
+ rCtx->Finalize (CHIP_NO_ERROR);
292
+ }
293
+
294
+ rCtx->mInstance ->RemoveContext (rCtx);
295
+ }
296
+
279
297
gboolean OnResolveFinalize (gpointer userData)
280
298
{
281
299
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
282
300
auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(userData);
301
+ if (!rCtx)
302
+ {
303
+ ChipLogError (DeviceLayer, " Null context in OnResolveFinalize" );
304
+ return G_SOURCE_REMOVE;
305
+ }
283
306
284
- rCtx->Finalize (CHIP_NO_ERROR);
307
+ CHIP_ERROR err = chip::DeviceLayer::PlatformMgr ().ScheduleWork (HandleResolveTask, reinterpret_cast <intptr_t >(rCtx));
308
+ if (err != CHIP_NO_ERROR)
309
+ {
310
+ ChipLogError (DeviceLayer, " Failed to schedule resolve task: %s" , err.AsString ());
311
+ rCtx->mInstance ->RemoveContext (rCtx);
312
+ return G_SOURCE_REMOVE;
313
+ }
285
314
286
- rCtx->mInstance ->RemoveContext (rCtx);
287
315
return G_SOURCE_REMOVE;
288
316
}
289
317
290
318
void OnResolve (dnssd_error_e result, dnssd_service_h service, void * userData)
291
319
{
292
320
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
321
+
293
322
auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(userData);
294
323
295
324
chip::GAutoPtr<char > name;
0 commit comments