@@ -276,12 +276,37 @@ 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
+ chip::DeviceLayer::StackLock lock;
290
+ rCtx->Finalize (CHIP_NO_ERROR);
291
+ }
292
+
279
293
gboolean OnResolveFinalize (gpointer userData)
280
294
{
281
295
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
282
296
auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(userData);
297
+ if (!rCtx)
298
+ {
299
+ ChipLogError (DeviceLayer, " Null context in OnResolveFinalize" );
300
+ return G_SOURCE_REMOVE;
301
+ }
283
302
284
- rCtx->Finalize (CHIP_NO_ERROR);
303
+ CHIP_ERROR err = chip::DeviceLayer::PlatformMgr ().ScheduleWork (HandleResolveTask, reinterpret_cast <intptr_t >(rCtx));
304
+ if (err != CHIP_NO_ERROR)
305
+ {
306
+ ChipLogError (DeviceLayer, " Failed to schedule resolve task: %s" , err.AsString ());
307
+ rCtx->mInstance ->RemoveContext (rCtx);
308
+ return G_SOURCE_REMOVE;
309
+ }
285
310
286
311
rCtx->mInstance ->RemoveContext (rCtx);
287
312
return G_SOURCE_REMOVE;
@@ -290,6 +315,7 @@ gboolean OnResolveFinalize(gpointer userData)
290
315
void OnResolve (dnssd_error_e result, dnssd_service_h service, void * userData)
291
316
{
292
317
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
318
+
293
319
auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(userData);
294
320
295
321
chip::GAutoPtr<char > name;
0 commit comments