From 212e05042687e484548d2e1e5c45641a652565bf Mon Sep 17 00:00:00 2001 From: NeaguGeorgiana23 Date: Tue, 23 Jun 2026 12:35:19 +0000 Subject: [PATCH 1/4] fix race condition between status check and provider lookup Signed-off-by: NeaguGeorgiana23 --- openfeature/client_api.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/openfeature/client_api.h b/openfeature/client_api.h index b3c7e34..730896b 100644 --- a/openfeature/client_api.h +++ b/openfeature/client_api.h @@ -113,7 +113,16 @@ template ClientAPI::EvaluateFlag( ValueType default_value, const std::optional& ctx, ProviderCallable provider_call) { - ProviderStatus status = GetProviderStatus(); + std::shared_ptr manager = + provider_repository_.GetFeatureProviderStatusManager(domain_); + if (!manager) { + return std::make_unique( + default_value, Reason::kError, std::nullopt, FlagMetadata(), + ErrorCode::kProviderFatal, + "Provider status manager not found for domain"); + } + + ProviderStatus status = manager->GetStatus(); if (status == ProviderStatus::kNotReady) { return std::make_unique( default_value, Reason::kError, std::nullopt, FlagMetadata(), From c327b5cb05395174ffe7ea7015cb73b4e46bf1a6 Mon Sep 17 00:00:00 2001 From: NeaguGeorgiana23 Date: Tue, 23 Jun 2026 12:50:33 +0000 Subject: [PATCH 2/4] addressed CodeRabbit review Signed-off-by: NeaguGeorgiana23 --- openfeature/client_api.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openfeature/client_api.h b/openfeature/client_api.h index 730896b..50b7d78 100644 --- a/openfeature/client_api.h +++ b/openfeature/client_api.h @@ -134,8 +134,7 @@ std::unique_ptr ClientAPI::EvaluateFlag( ErrorCode::kProviderFatal, "Provider is in fatal error state"); } - std::shared_ptr provider = - provider_repository_.GetProvider(domain_); + std::shared_ptr provider = manager->GetProvider(); if (!provider) { return std::make_unique( default_value, Reason::kError, std::nullopt, FlagMetadata(), From 2be23bae86f57792dbc96f07bbd336976b060f9f Mon Sep 17 00:00:00 2001 From: NeaguGeorgiana23 Date: Wed, 24 Jun 2026 09:26:59 +0000 Subject: [PATCH 3/4] apply gemini suggestions Signed-off-by: NeaguGeorgiana23 --- openfeature/client_api.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openfeature/client_api.h b/openfeature/client_api.h index 50b7d78..3a9a0df 100644 --- a/openfeature/client_api.h +++ b/openfeature/client_api.h @@ -118,7 +118,7 @@ std::unique_ptr ClientAPI::EvaluateFlag( if (!manager) { return std::make_unique( default_value, Reason::kError, std::nullopt, FlagMetadata(), - ErrorCode::kProviderFatal, + ErrorCode::kGeneral, "Provider status manager not found for domain"); } From 18f55bea5912048197ed692ef8f6abf17c295448 Mon Sep 17 00:00:00 2001 From: NeaguGeorgiana23 Date: Wed, 24 Jun 2026 09:26:59 +0000 Subject: [PATCH 4/4] apply gemini suggestions Signed-off-by: NeaguGeorgiana23 --- openfeature/client_api.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/openfeature/client_api.h b/openfeature/client_api.h index 50b7d78..d55e424 100644 --- a/openfeature/client_api.h +++ b/openfeature/client_api.h @@ -118,8 +118,7 @@ std::unique_ptr ClientAPI::EvaluateFlag( if (!manager) { return std::make_unique( default_value, Reason::kError, std::nullopt, FlagMetadata(), - ErrorCode::kProviderFatal, - "Provider status manager not found for domain"); + ErrorCode::kGeneral, "Provider status manager not found for domain"); } ProviderStatus status = manager->GetStatus();