From 5589dc8fe95c48e7c278b1a3cfe171e6ae9cfe16 Mon Sep 17 00:00:00 2001 From: J Wyman Date: Mon, 8 Dec 2025 18:12:27 -0500 Subject: [PATCH 1/3] fix: Correctly Guard List Access This change adds missing mutex guards when accessing a shared list. --- src/sagemaker_server.cc | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/sagemaker_server.cc b/src/sagemaker_server.cc index 49b8a3ba06..3927e774d4 100644 --- a/src/sagemaker_server.cc +++ b/src/sagemaker_server.cc @@ -182,10 +182,13 @@ SagemakerAPIServer::Handle(evhtp_request_t* req) if (action == "/invoke") { LOG_VERBOSE(1) << "SageMaker request: INVOKE MODEL"; - if (sagemaker_models_list_.find(multi_model_name.c_str()) == - sagemaker_models_list_.end()) { - evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ - return; + { + std::lock_guard lock(models_list_mutex_); + if (sagemaker_models_list_.find(multi_model_name.c_str()) == + sagemaker_models_list_.end()) { + evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ + return; + } } LOG_VERBOSE(1) << "SageMaker MME Custom Invoke Model Path"; @@ -646,12 +649,15 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( target_model = model_name_hash; } - if (sagemaker_models_list_.find(model_name_hash) == - sagemaker_models_list_.end()) { - LOG_VERBOSE(1) << "Model " << target_model << " with model hash " - << model_name_hash << " is not loaded." << std::endl; - evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ - return; + { + std::lock_guard lock(models_list_mutex_); + if (sagemaker_models_list_.find(model_name_hash) == + sagemaker_models_list_.end()) { + LOG_VERBOSE(1) << "Model " << target_model << " with model hash " + << model_name_hash << " is not loaded." << std::endl; + evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ + return; + } } LOG_INFO << "Unloading SageMaker TargetModel: " << target_model << std::endl; @@ -722,7 +728,11 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( "result in SageMaker UNLOAD timeout."; } - std::string repo_parent_path = sagemaker_models_list_.at(model_name_hash); + std::string repo_parent_path; + { + std::lock_guard lock(models_list_mutex_); + repo_parent_path = sagemaker_models_list_.at(model_name_hash); + } TRITONSERVER_Error* unregister_err = nullptr; @@ -740,8 +750,10 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( TRITONSERVER_ErrorDelete(unregister_err); - std::lock_guard lock(models_list_mutex_); - sagemaker_models_list_.erase(model_name_hash); + { + std::lock_guard lock(models_list_mutex_); + sagemaker_models_list_.erase(model_name_hash); + } } void From deab4c63f6c09560548b921a84a319c15d362beb Mon Sep 17 00:00:00 2001 From: J Wyman Date: Mon, 8 Dec 2025 18:16:33 -0500 Subject: [PATCH 2/3] fix: pedantic code style --- src/sagemaker_server.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sagemaker_server.cc b/src/sagemaker_server.cc index 3927e774d4..db2cf019aa 100644 --- a/src/sagemaker_server.cc +++ b/src/sagemaker_server.cc @@ -654,7 +654,7 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( if (sagemaker_models_list_.find(model_name_hash) == sagemaker_models_list_.end()) { LOG_VERBOSE(1) << "Model " << target_model << " with model hash " - << model_name_hash << " is not loaded." << std::endl; + << model_name_hash << " is not loaded." << std::endl; evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ return; } From 6f0c5c718b6e8e4359cdeac9041157ccd2045083 Mon Sep 17 00:00:00 2001 From: J Wyman Date: Thu, 11 Dec 2025 13:29:24 -0500 Subject: [PATCH 3/3] reduce scope --- src/sagemaker_server.cc | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/src/sagemaker_server.cc b/src/sagemaker_server.cc index db2cf019aa..9351bf4b19 100644 --- a/src/sagemaker_server.cc +++ b/src/sagemaker_server.cc @@ -649,15 +649,12 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( target_model = model_name_hash; } - { - std::lock_guard lock(models_list_mutex_); - if (sagemaker_models_list_.find(model_name_hash) == - sagemaker_models_list_.end()) { - LOG_VERBOSE(1) << "Model " << target_model << " with model hash " - << model_name_hash << " is not loaded." << std::endl; - evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ - return; - } + if (sagemaker_models_list_.find(model_name_hash) == + sagemaker_models_list_.end()) { + LOG_VERBOSE(1) << "Model " << target_model << " with model hash " + << model_name_hash << " is not loaded." << std::endl; + evhtp_send_reply(req, EVHTP_RES_NOTFOUND); /* 404*/ + return; } LOG_INFO << "Unloading SageMaker TargetModel: " << target_model << std::endl; @@ -728,11 +725,7 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( "result in SageMaker UNLOAD timeout."; } - std::string repo_parent_path; - { - std::lock_guard lock(models_list_mutex_); - repo_parent_path = sagemaker_models_list_.at(model_name_hash); - } + std::string repo_parent_path = sagemaker_models_list_.at(model_name_hash); TRITONSERVER_Error* unregister_err = nullptr; @@ -750,10 +743,8 @@ SagemakerAPIServer::SageMakerMMEUnloadModel( TRITONSERVER_ErrorDelete(unregister_err); - { - std::lock_guard lock(models_list_mutex_); - sagemaker_models_list_.erase(model_name_hash); - } + std::lock_guard lock(models_list_mutex_); + sagemaker_models_list_.erase(model_name_hash); } void