@@ -281,12 +281,7 @@ gboolean OnResolveFinalize(gpointer userData)
281
281
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
282
282
auto rCtx = reinterpret_cast <chip::Dnssd::ResolveContext *>(userData);
283
283
284
- {
285
- // Lock the stack mutex when calling the callback function, so that the callback
286
- // function could safely perform message exchange (e.g. PASE session pairing).
287
- chip::DeviceLayer::StackLock lock;
288
- rCtx->Finalize (CHIP_NO_ERROR);
289
- }
284
+ rCtx->Finalize (CHIP_NO_ERROR);
290
285
291
286
rCtx->mInstance ->RemoveContext (rCtx);
292
287
return G_SOURCE_REMOVE;
@@ -377,14 +372,37 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData)
377
372
378
373
CHIP_ERROR ResolveAsync (chip::Dnssd::ResolveContext * rCtx)
379
374
{
375
+ CHIP_ERROR err = CHIP_NO_ERROR;
376
+ int ret;
377
+
378
+ assertChipStackLockedByCurrentThread ();
379
+
380
380
ChipLogDetail (DeviceLayer, " DNSsd %s" , __func__);
381
381
382
- int ret = dnssd_resolve_service (rCtx->mServiceHandle , OnResolve, rCtx);
382
+ if (rCtx->mInterfaceId == 0 )
383
+ {
384
+ ret = dnssd_create_remote_service (rCtx->mType , rCtx->mName , nullptr , &rCtx->mServiceHandle );
385
+ }
386
+ else
387
+ {
388
+ char iface[IF_NAMESIZE + 1 ] = " " ;
389
+ VerifyOrExit (if_indextoname (rCtx->mInterfaceId , iface) != nullptr ,
390
+ ChipLogError (DeviceLayer, " if_indextoname() failed: %s" , strerror (errno));
391
+ err = CHIP_ERROR_POSIX (errno));
392
+ ret = dnssd_create_remote_service (rCtx->mType , rCtx->mName , iface, &rCtx->mServiceHandle );
393
+ }
394
+
395
+ VerifyOrExit (ret == DNSSD_ERROR_NONE,
396
+ ChipLogError (DeviceLayer, " dnssd_create_remote_service() failed: %s" , get_error_message (ret));
397
+ err = TizenToChipError (ret));
398
+
399
+ ret = dnssd_resolve_service (rCtx->mServiceHandle , OnResolve, rCtx);
383
400
VerifyOrReturnValue (ret == DNSSD_ERROR_NONE, TizenToChipError (ret),
384
401
ChipLogError (DeviceLayer, " dnssd_resolve_service() failed: %s" , get_error_message (ret)));
385
402
386
403
rCtx->mIsResolving = true ;
387
- return CHIP_NO_ERROR;
404
+ exit :
405
+ return err;
388
406
}
389
407
390
408
} // namespace
@@ -628,30 +646,12 @@ CHIP_ERROR DnssdTizen::Resolve(const DnssdService & browseResult, chip::Inet::In
628
646
std::string fullType = GetFullType (browseResult.mType , browseResult.mProtocol );
629
647
auto interfaceId = interface.GetPlatformInterface ();
630
648
CHIP_ERROR err = CHIP_NO_ERROR;
631
- int ret;
632
649
633
650
ChipLogDetail (DeviceLayer, " DNSsd %s: name: %s, type: %s, interfaceId: %u" , __func__, browseResult.mName , fullType.c_str (),
634
651
interfaceId);
635
652
636
653
auto resolveCtx = CreateResolveContext (browseResult.mName , fullType.c_str (), interfaceId, callback, context);
637
654
638
- if (interfaceId == 0 )
639
- {
640
- ret = dnssd_create_remote_service (fullType.c_str (), browseResult.mName , nullptr , &resolveCtx->mServiceHandle );
641
- }
642
- else
643
- {
644
- char iface[IF_NAMESIZE + 1 ] = " " ;
645
- VerifyOrExit (if_indextoname (interfaceId, iface) != nullptr ,
646
- ChipLogError (DeviceLayer, " if_indextoname() failed: %s" , strerror (errno));
647
- err = CHIP_ERROR_POSIX (errno));
648
- ret = dnssd_create_remote_service (fullType.c_str (), browseResult.mName , iface, &resolveCtx->mServiceHandle );
649
- }
650
-
651
- VerifyOrExit (ret == DNSSD_ERROR_NONE,
652
- ChipLogError (DeviceLayer, " dnssd_create_remote_service() failed: %s" , get_error_message (ret));
653
- err = TizenToChipError (ret));
654
-
655
655
err = DeviceLayer::PlatformMgrImpl ().GLibMatterContextInvokeSync (ResolveAsync, resolveCtx);
656
656
SuccessOrExit (err);
657
657
0 commit comments