diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index 1b57e1811a1495..8ce52cfaa85dba 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -281,12 +281,7 @@ gboolean OnResolveFinalize(gpointer userData) ChipLogDetail(DeviceLayer, "DNSsd %s", __func__); auto rCtx = reinterpret_cast(userData); - { - // Lock the stack mutex when calling the callback function, so that the callback - // function could safely perform message exchange (e.g. PASE session pairing). - chip::DeviceLayer::StackLock lock; - rCtx->Finalize(CHIP_NO_ERROR); - } + rCtx->Finalize(CHIP_NO_ERROR); rCtx->mInstance->RemoveContext(rCtx); return G_SOURCE_REMOVE; @@ -377,11 +372,38 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData) CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { + int ret; + ChipLogDetail(DeviceLayer, "DNSsd %s", __func__); - int ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx); - VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret), - ChipLogError(DeviceLayer, "dnssd_resolve_service() failed: %s", get_error_message(ret))); + if (rCtx->mInterfaceId == 0) + { + ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, nullptr, &rCtx->mServiceHandle); + } + else + { + char iface[IF_NAMESIZE + 1] = ""; + if (if_indextoname(rCtx->mInterfaceId, iface) == nullptr) + { + ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno)); + return CHIP_ERROR_POSIX(errno); + } + + ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle); + } + + if (ret != DNSSD_ERROR_NONE) + { + ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret)); + return TizenToChipError(ret); + } + + ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx); + if (ret != DNSSD_ERROR_NONE) + { + ChipLogError(DeviceLayer, "dnssd_resolve_service() failed: %s", get_error_message(ret)); + return TizenToChipError(ret); + } rCtx->mIsResolving = true; return CHIP_NO_ERROR; @@ -628,30 +650,12 @@ CHIP_ERROR DnssdTizen::Resolve(const DnssdService & browseResult, chip::Inet::In std::string fullType = GetFullType(browseResult.mType, browseResult.mProtocol); auto interfaceId = interface.GetPlatformInterface(); CHIP_ERROR err = CHIP_NO_ERROR; - int ret; ChipLogDetail(DeviceLayer, "DNSsd %s: name: %s, type: %s, interfaceId: %u", __func__, browseResult.mName, fullType.c_str(), interfaceId); auto resolveCtx = CreateResolveContext(browseResult.mName, fullType.c_str(), interfaceId, callback, context); - if (interfaceId == 0) - { - ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, nullptr, &resolveCtx->mServiceHandle); - } - else - { - char iface[IF_NAMESIZE + 1] = ""; - VerifyOrExit(if_indextoname(interfaceId, iface) != nullptr, - ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno)); - err = CHIP_ERROR_POSIX(errno)); - ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, iface, &resolveCtx->mServiceHandle); - } - - VerifyOrExit(ret == DNSSD_ERROR_NONE, - ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret)); - err = TizenToChipError(ret)); - err = DeviceLayer::PlatformMgrImpl().GLibMatterContextInvokeSync(ResolveAsync, resolveCtx); SuccessOrExit(err);