From 7ba578063d0341f136e5348ff920a5dbeba7a491 Mon Sep 17 00:00:00 2001 From: Dan Kouba Date: Wed, 17 Dec 2025 11:44:21 -0800 Subject: [PATCH 1/3] Reserve slot for container once identified. Prevents race condition where containers start in the same slot if slow to start. Signed-off-by: Dan Kouba --- src/ocre/components/container_supervisor/cs_sm_impl.c | 3 ++- src/ocre/ocre_container_runtime/ocre_container_runtime.c | 1 + src/ocre/ocre_container_runtime/ocre_container_runtime.h | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ocre/components/container_supervisor/cs_sm_impl.c b/src/ocre/components/container_supervisor/cs_sm_impl.c index c462c975..1bb92930 100644 --- a/src/ocre/components/container_supervisor/cs_sm_impl.c +++ b/src/ocre/components/container_supervisor/cs_sm_impl.c @@ -354,7 +354,8 @@ ocre_container_status_t CS_create_container(ocre_container_t *container) } if (container->container_runtime_status != CONTAINER_STATUS_UNKNOWN && - container->container_runtime_status != CONTAINER_STATUS_DESTROYED) { + container->container_runtime_status != CONTAINER_STATUS_DESTROYED && + container->container_runtime_status != CONTAINER_STATUS_RESERVED) {) { LOG_ERR("Cannot create container again container with ID: %d, already exists", curr_container_ID); return CONTAINER_STATUS_ERROR; } diff --git a/src/ocre/ocre_container_runtime/ocre_container_runtime.c b/src/ocre/ocre_container_runtime/ocre_container_runtime.c index e0847f1d..62a796ca 100644 --- a/src/ocre/ocre_container_runtime/ocre_container_runtime.c +++ b/src/ocre/ocre_container_runtime/ocre_container_runtime.c @@ -54,6 +54,7 @@ ocre_container_status_t ocre_container_runtime_create_container(ocre_cs_ctx *ctx (ctx->containers[i].container_runtime_status == CONTAINER_STATUS_DESTROYED)) { *container_id = i; ctx->containers[i].container_ID = i; + ctx->containers[i].container_runtime_status = CONTAINER_STATUS_RESERVED; validity_flag = true; break; } diff --git a/src/ocre/ocre_container_runtime/ocre_container_runtime.h b/src/ocre/ocre_container_runtime/ocre_container_runtime.h index e3dda8ff..9ecd9e72 100644 --- a/src/ocre/ocre_container_runtime/ocre_container_runtime.h +++ b/src/ocre/ocre_container_runtime/ocre_container_runtime.h @@ -56,6 +56,7 @@ typedef enum { */ typedef enum { CONTAINER_STATUS_UNKNOWN, ///< Status is unknown. + CONTAINER_STATUS_RESERVED, ///< Container slot has been reserved. CONTAINER_STATUS_CREATED, ///< Container has been created. CONTAINER_STATUS_RUNNING, ///< Container is currently running. CONTAINER_STATUS_STOPPED, ///< Container has been stopped. From c34b7bcc690b45205abab81ffaea7407184efe41 Mon Sep 17 00:00:00 2001 From: Krisztian Szilvasi <34309983+kr-t@users.noreply.github.com> Date: Wed, 17 Dec 2025 21:32:25 +0100 Subject: [PATCH 2/3] Fix bracket typo Signed-off-by: Krisztian Szilvasi <34309983+kr-t@users.noreply.github.com> --- src/ocre/components/container_supervisor/cs_sm_impl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ocre/components/container_supervisor/cs_sm_impl.c b/src/ocre/components/container_supervisor/cs_sm_impl.c index 1bb92930..a116d424 100644 --- a/src/ocre/components/container_supervisor/cs_sm_impl.c +++ b/src/ocre/components/container_supervisor/cs_sm_impl.c @@ -355,7 +355,7 @@ ocre_container_status_t CS_create_container(ocre_container_t *container) if (container->container_runtime_status != CONTAINER_STATUS_UNKNOWN && container->container_runtime_status != CONTAINER_STATUS_DESTROYED && - container->container_runtime_status != CONTAINER_STATUS_RESERVED) {) { + container->container_runtime_status != CONTAINER_STATUS_RESERVED) { LOG_ERR("Cannot create container again container with ID: %d, already exists", curr_container_ID); return CONTAINER_STATUS_ERROR; } From 11670af9b63ce57b5d05418e05cde21508c18811 Mon Sep 17 00:00:00 2001 From: Krisztian Szilvasi <34309983+kr-t@users.noreply.github.com> Date: Wed, 17 Dec 2025 21:33:14 +0100 Subject: [PATCH 3/3] Fix clang Signed-off-by: Krisztian Szilvasi <34309983+kr-t@users.noreply.github.com> --- src/ocre/components/container_supervisor/cs_sm_impl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ocre/components/container_supervisor/cs_sm_impl.c b/src/ocre/components/container_supervisor/cs_sm_impl.c index a116d424..cd66e726 100644 --- a/src/ocre/components/container_supervisor/cs_sm_impl.c +++ b/src/ocre/components/container_supervisor/cs_sm_impl.c @@ -355,7 +355,7 @@ ocre_container_status_t CS_create_container(ocre_container_t *container) if (container->container_runtime_status != CONTAINER_STATUS_UNKNOWN && container->container_runtime_status != CONTAINER_STATUS_DESTROYED && - container->container_runtime_status != CONTAINER_STATUS_RESERVED) { + container->container_runtime_status != CONTAINER_STATUS_RESERVED) { LOG_ERR("Cannot create container again container with ID: %d, already exists", curr_container_ID); return CONTAINER_STATUS_ERROR; }