From 051d0f8f85ab0b89bd581b3d29e748789d70c7c9 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Thu, 9 Jan 2025 14:37:08 +0900 Subject: [PATCH 1/6] [Tizen] Modify dnssd resolve operation process Signed-off-by: hyunuk.tak --- src/platform/Tizen/DnssdImpl.cpp | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index 1b57e1811a1495..4a64ab6019885c 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,14 +372,37 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData) CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { + CHIP_ERROR err = CHIP_NO_ERROR; + int ret; + + assertChipStackLockedByCurrentThread(); + ChipLogDetail(DeviceLayer, "DNSsd %s", __func__); - int ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx); + if (rCtx->mInterfaceId == 0) + { + ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, nullptr, &rCtx->mServiceHandle); + } + else + { + char iface[IF_NAMESIZE + 1] = ""; + VerifyOrExit(if_indextoname(rCtx->mInterfaceId, iface) != nullptr, + ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno)); + err = CHIP_ERROR_POSIX(errno)); + ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle); + } + + VerifyOrExit(ret == DNSSD_ERROR_NONE, + ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret)); + err = TizenToChipError(ret)); + + 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))); rCtx->mIsResolving = true; - return CHIP_NO_ERROR; +exit: + return err; } } // namespace @@ -628,30 +646,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); From 12bcab05e49d08b2881fd83aa3894484dc399361 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Thu, 9 Jan 2025 05:57:41 +0000 Subject: [PATCH 2/6] Restyled by clang-format --- src/platform/Tizen/DnssdImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index 4a64ab6019885c..4a10d76c0aa013 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -372,7 +372,7 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData) CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { - CHIP_ERROR err = CHIP_NO_ERROR; + CHIP_ERROR err = CHIP_NO_ERROR; int ret; assertChipStackLockedByCurrentThread(); From 5a4e2474d238be136aae409a5898f198e76843b9 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 13 Jan 2025 09:59:57 +0900 Subject: [PATCH 3/6] Modify the return method --- src/platform/Tizen/DnssdImpl.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index 4a10d76c0aa013..0c68e8e7642060 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -372,7 +372,6 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData) CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { - CHIP_ERROR err = CHIP_NO_ERROR; int ret; assertChipStackLockedByCurrentThread(); @@ -386,23 +385,20 @@ CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) else { char iface[IF_NAMESIZE + 1] = ""; - VerifyOrExit(if_indextoname(rCtx->mInterfaceId, iface) != nullptr, - ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno)); - err = CHIP_ERROR_POSIX(errno)); + VerifyOrReturnValue(if_indextoname(rCtx->mInterfaceId, iface) != nullptr, CHIP_ERROR_POSIX(errno), + ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno))); ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle); } - VerifyOrExit(ret == DNSSD_ERROR_NONE, - ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret)); - err = TizenToChipError(ret)); + VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret), + ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret))); 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))); rCtx->mIsResolving = true; -exit: - return err; + return CHIP_NO_ERROR; } } // namespace From 97b87b24d3e4d0b59614bf26062169330099a42b Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 13 Jan 2025 01:02:22 +0000 Subject: [PATCH 4/6] Restyled by clang-format --- src/platform/Tizen/DnssdImpl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index 0c68e8e7642060..f4fba0f188a380 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -386,7 +386,7 @@ CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { char iface[IF_NAMESIZE + 1] = ""; VerifyOrReturnValue(if_indextoname(rCtx->mInterfaceId, iface) != nullptr, CHIP_ERROR_POSIX(errno), - ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno))); + ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno))); ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle); } From 75f4269ddc7fe440c8d20a6349dc927c6ac60323 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 13 Jan 2025 19:04:31 +0900 Subject: [PATCH 5/6] Fix a segfault --- src/platform/Tizen/DnssdImpl.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index f4fba0f188a380..cb6f443d6ff715 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -374,8 +374,6 @@ CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) { int ret; - assertChipStackLockedByCurrentThread(); - ChipLogDetail(DeviceLayer, "DNSsd %s", __func__); if (rCtx->mInterfaceId == 0) From c6feed99e1547dcfd68a45b14ff9e2c5e022b7a2 Mon Sep 17 00:00:00 2001 From: "hyunuk.tak" Date: Mon, 3 Feb 2025 10:08:59 +0900 Subject: [PATCH 6/6] Readability improvement --- src/platform/Tizen/DnssdImpl.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/platform/Tizen/DnssdImpl.cpp b/src/platform/Tizen/DnssdImpl.cpp index cb6f443d6ff715..8ce52cfaa85dba 100644 --- a/src/platform/Tizen/DnssdImpl.cpp +++ b/src/platform/Tizen/DnssdImpl.cpp @@ -383,17 +383,27 @@ CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx) else { char iface[IF_NAMESIZE + 1] = ""; - VerifyOrReturnValue(if_indextoname(rCtx->mInterfaceId, iface) != nullptr, CHIP_ERROR_POSIX(errno), - ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno))); + 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); } - VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret), - ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret))); + 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); - VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret), - ChipLogError(DeviceLayer, "dnssd_resolve_service() failed: %s", get_error_message(ret))); + 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;