From 7b43f5575399b18c7847efb665a3c1f16d5fcc2c Mon Sep 17 00:00:00 2001 From: Sky Date: Sat, 6 Dec 2025 19:28:16 +0800 Subject: [PATCH] ggml : improve error handling for search path existence checks (#17653) * Improve error handling for search path existence checks Refactor existence checks for search paths using std::error_code to handle potential errors. * Improve cache file existence check with error code Update fs::exists to use std::error_code for error handling. * Simplify existence check for search paths Simplify existence check for search paths * Fix logging path in error message for posix_stat * Update ggml/src/ggml-backend-reg.cpp Co-authored-by: Aman Gupta * Adapt to the coding standard --------- Co-authored-by: Aman Gupta --- ggml/src/ggml-backend-reg.cpp | 14 +++++++++++--- ggml/src/ggml-rpc/ggml-rpc.cpp | 3 ++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ggml/src/ggml-backend-reg.cpp b/ggml/src/ggml-backend-reg.cpp index e96b5c403d..88e6dc45c7 100644 --- a/ggml/src/ggml-backend-reg.cpp +++ b/ggml/src/ggml-backend-reg.cpp @@ -534,8 +534,12 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent, fs::path best_path; for (const auto & search_path : search_paths) { - if (!fs::exists(search_path)) { - GGML_LOG_DEBUG("%s: search path %s does not exist\n", __func__, path_str(search_path).c_str()); + if (std::error_code ec; !fs::exists(search_path, ec)) { + if (ec) { + GGML_LOG_DEBUG("%s: posix_stat(%s) failure, error-message: %s\n", __func__, path_str(search_path).c_str(), ec.message().c_str()); + } else { + GGML_LOG_DEBUG("%s: search path %s does not exist\n", __func__, path_str(search_path).c_str()); + } continue; } fs::directory_iterator dir_it(search_path, fs::directory_options::skip_permission_denied); @@ -575,8 +579,12 @@ static ggml_backend_reg_t ggml_backend_load_best(const char * name, bool silent, for (const auto & search_path : search_paths) { fs::path filename = backend_filename_prefix().native() + name_path.native() + backend_filename_extension().native(); fs::path path = search_path / filename; - if (fs::exists(path)) { + if (std::error_code ec; fs::exists(path, ec)) { return get_reg().load_backend(path, silent); + } else { + if (ec) { + GGML_LOG_DEBUG("%s: posix_stat(%s) failure, error-message: %s\n", __func__, path_str(path).c_str(), ec.message().c_str()); + } } } return nullptr; diff --git a/ggml/src/ggml-rpc/ggml-rpc.cpp b/ggml/src/ggml-rpc/ggml-rpc.cpp index cf656b6a08..18a45d2d96 100644 --- a/ggml/src/ggml-rpc/ggml-rpc.cpp +++ b/ggml/src/ggml-rpc/ggml-rpc.cpp @@ -1257,7 +1257,8 @@ bool rpc_server::get_cached_file(uint64_t hash, std::vector & data) { char hash_str[17]; snprintf(hash_str, sizeof(hash_str), "%016" PRIx64, hash); fs::path cache_file = fs::path(cache_dir) / hash_str; - if (!fs::exists(cache_file)) { + std::error_code ec; + if (!fs::exists(cache_file, ec)) { return false; } std::ifstream ifs(cache_file, std::ios::binary);