From 30ddc32e72bd65fe16cf8fb6fbd07ba473fe2a3e Mon Sep 17 00:00:00 2001 From: dwolav200 Date: Wed, 8 Apr 2026 10:39:24 -0400 Subject: [PATCH 1/3] RDKEMW-16763 : rf4ce init failure causes deadlock --- src/rf4ce/ctrlm_rf4ce_network.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/rf4ce/ctrlm_rf4ce_network.cpp b/src/rf4ce/ctrlm_rf4ce_network.cpp index 5009c592..39777606 100644 --- a/src/rf4ce/ctrlm_rf4ce_network.cpp +++ b/src/rf4ce/ctrlm_rf4ce_network.cpp @@ -411,8 +411,17 @@ ctrlm_hal_result_t ctrlm_obj_network_rf4ce_t::hal_init_request(GThread *ctrlm_ma // Block until initialization is complete or a timeout occurs XLOGD_INFO("Waiting for %s initialization...", name_get()); - sem_wait(&semaphore_); + struct timespec timeout; + clock_gettime(CLOCK_REALTIME, &timeout); + timeout.tv_sec += 2; // this operation should complete in under 100 ms under normal circumstances + + int sem_result = sem_timedwait(&semaphore_, &timeout); sem_destroy(&semaphore_); + + if(sem_result == -1) { + XLOGD_ERROR("Timeout waiting for %s initialization", name_get()); + init_result_ = CTRLM_HAL_RESULT_ERROR; + } ready_ = (CTRLM_HAL_RESULT_SUCCESS == init_result_); From 317377acd0145d08c1b40bf6fad950d47dbde70e Mon Sep 17 00:00:00 2001 From: dwolav200 Date: Wed, 8 Apr 2026 11:09:31 -0400 Subject: [PATCH 2/3] fixing copilot concerns --- src/rf4ce/ctrlm_rf4ce_network.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/rf4ce/ctrlm_rf4ce_network.cpp b/src/rf4ce/ctrlm_rf4ce_network.cpp index 39777606..e252475f 100644 --- a/src/rf4ce/ctrlm_rf4ce_network.cpp +++ b/src/rf4ce/ctrlm_rf4ce_network.cpp @@ -416,11 +416,16 @@ ctrlm_hal_result_t ctrlm_obj_network_rf4ce_t::hal_init_request(GThread *ctrlm_ma timeout.tv_sec += 2; // this operation should complete in under 100 ms under normal circumstances int sem_result = sem_timedwait(&semaphore_, &timeout); - sem_destroy(&semaphore_); if(sem_result == -1) { - XLOGD_ERROR("Timeout waiting for %s initialization", name_get()); + if(errno == ETIMEDOUT) { + XLOGD_ERROR("Timeout waiting for %s initialization", name_get()); + } else { + XLOGD_ERROR("Error waiting for %s initialization: %s", name_get(), strerror(errno)); + } init_result_ = CTRLM_HAL_RESULT_ERROR; + } else { + sem_destroy(&semaphore_); } ready_ = (CTRLM_HAL_RESULT_SUCCESS == init_result_); From 583e963f2676dd5d8ef1aabf3e4a84eaf56d6311 Mon Sep 17 00:00:00 2001 From: dwolav200 Date: Wed, 8 Apr 2026 11:35:44 -0400 Subject: [PATCH 3/3] more copilot concerns --- src/rf4ce/ctrlm_rf4ce_network.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/rf4ce/ctrlm_rf4ce_network.cpp b/src/rf4ce/ctrlm_rf4ce_network.cpp index e252475f..d1ac409f 100644 --- a/src/rf4ce/ctrlm_rf4ce_network.cpp +++ b/src/rf4ce/ctrlm_rf4ce_network.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include "ctrlm.h" #include "ctrlm_log.h" @@ -415,8 +416,17 @@ ctrlm_hal_result_t ctrlm_obj_network_rf4ce_t::hal_init_request(GThread *ctrlm_ma clock_gettime(CLOCK_REALTIME, &timeout); timeout.tv_sec += 2; // this operation should complete in under 100 ms under normal circumstances - int sem_result = sem_timedwait(&semaphore_, &timeout); - + int sem_result = -1; + do { + errno = 0; + sem_result = sem_timedwait(&semaphore_, &timeout); + if(sem_result == -1 && errno == EINTR) { + XLOGD_INFO("interrupted"); + } else { + break; + } + } while(1); + if(sem_result == -1) { if(errno == ETIMEDOUT) { XLOGD_ERROR("Timeout waiting for %s initialization", name_get());