[C-API] add ov_get_last_error_msg() API (#20643)
This commit is contained in:
parent
44925b580f
commit
9e97d7ef1a
@ -204,3 +204,10 @@ ov_get_error_info(ov_status_e status);
|
||||
*/
|
||||
OPENVINO_C_API(void)
|
||||
ov_free(const char* content);
|
||||
|
||||
/**
|
||||
* @brief Get the last error msg.
|
||||
* @ingroup ov_base_c_api
|
||||
*/
|
||||
OPENVINO_C_API(const char*)
|
||||
ov_get_last_err_msg();
|
@ -14,13 +14,15 @@
|
||||
#include "openvino/core/except.hpp"
|
||||
#include "openvino/openvino.hpp"
|
||||
|
||||
#define CATCH_IE_EXCEPTION(StatusCode, ExceptionType) \
|
||||
catch (const InferenceEngine::ExceptionType&) { \
|
||||
return ov_status_e::StatusCode; \
|
||||
#define CATCH_IE_EXCEPTION(StatusCode, ExceptionType) \
|
||||
catch (const InferenceEngine::ExceptionType& ex) { \
|
||||
dup_last_err_msg(ex.what()); \
|
||||
return ov_status_e::StatusCode; \
|
||||
}
|
||||
|
||||
#define CATCH_OV_EXCEPTION(StatusCode, ExceptionType) \
|
||||
catch (const ov::ExceptionType&) { \
|
||||
catch (const ov::ExceptionType& ex) { \
|
||||
dup_last_err_msg(ex.what()); \
|
||||
return ov_status_e::StatusCode; \
|
||||
}
|
||||
|
||||
@ -41,6 +43,7 @@
|
||||
CATCH_IE_EXCEPTION(NETWORK_NOT_READ, NetworkNotRead) \
|
||||
CATCH_IE_EXCEPTION(INFER_CANCELLED, InferCancelled) \
|
||||
catch (...) { \
|
||||
dup_last_err_msg("An unknown exception occurred"); \
|
||||
return ov_status_e::UNKNOW_EXCEPTION; \
|
||||
}
|
||||
|
||||
@ -224,3 +227,4 @@ struct mem_istream : virtual mem_stringbuf, std::istream {
|
||||
|
||||
char* str_to_char_array(const std::string& str);
|
||||
ov::element::Type get_element_type(ov_element_type_e type);
|
||||
void dup_last_err_msg(const char* msg);
|
||||
|
@ -17,6 +17,22 @@ char* str_to_char_array(const std::string& str) {
|
||||
return char_array;
|
||||
}
|
||||
|
||||
static std::string last_err_msg;
|
||||
static std::mutex last_msg_mutex;
|
||||
void dup_last_err_msg(const char* msg) {
|
||||
std::lock_guard<std::mutex> lock(last_msg_mutex);
|
||||
last_err_msg = std::string(msg);
|
||||
}
|
||||
|
||||
const char* ov_get_last_err_msg() {
|
||||
std::lock_guard<std::mutex> lock(last_msg_mutex);
|
||||
char* res = nullptr;
|
||||
if (!last_err_msg.empty()) {
|
||||
res = str_to_char_array(last_err_msg);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
ov_status_e ov_get_openvino_version(ov_version_t* version) {
|
||||
if (!version) {
|
||||
return ov_status_e::INVALID_C_PARAM;
|
||||
@ -66,6 +82,10 @@ ov_status_e ov_core_create(ov_core_t** core) {
|
||||
void ov_core_free(ov_core_t* core) {
|
||||
if (core)
|
||||
delete core;
|
||||
|
||||
// release err msg buffer, there will be no err msg after core is freed.
|
||||
std::lock_guard<std::mutex> lock(last_msg_mutex);
|
||||
last_err_msg.clear();
|
||||
}
|
||||
|
||||
ov_status_e ov_core_read_model(const ov_core_t* core,
|
||||
|
@ -33,6 +33,7 @@ public:
|
||||
ov_capi_test_base::TearDown();
|
||||
}
|
||||
};
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(ov_core, ov_core_test, ::testing::Values("CPU"));
|
||||
|
||||
TEST_P(ov_core_test, ov_core_create_with_config) {
|
||||
@ -699,4 +700,37 @@ TEST_P(ov_core_test, ov_core_compile_model_from_file_unicode) {
|
||||
}
|
||||
#endif
|
||||
|
||||
using ov_util_test = ov_core_test;
|
||||
INSTANTIATE_TEST_SUITE_P(ov_capi_test, ov_util_test, ::testing::Values("CPU"));
|
||||
|
||||
TEST_P(ov_util_test, ov_get_last_err_msg_check) {
|
||||
auto device_name = GetParam();
|
||||
ov_core_t* core = nullptr;
|
||||
OV_EXPECT_OK(ov_core_create(&core));
|
||||
EXPECT_NE(nullptr, core);
|
||||
|
||||
const char* key = ov_property_key_inference_num_threads;
|
||||
OV_EXPECT_OK(ov_core_set_property(core, device_name.c_str(), key, "abc"));
|
||||
|
||||
char* ret = nullptr;
|
||||
OV_EXPECT_NOT_OK(ov_core_get_property(core, device_name.c_str(), key, &ret));
|
||||
|
||||
auto err_msg = ov_get_last_err_msg();
|
||||
EXPECT_NE(nullptr, err_msg);
|
||||
ov_free(err_msg);
|
||||
ov_free(ret);
|
||||
ov_core_free(core);
|
||||
}
|
||||
|
||||
TEST_P(ov_util_test, ov_get_last_err_msg_check_empty_msg) {
|
||||
auto device_name = GetParam();
|
||||
ov_core_t* core = nullptr;
|
||||
OV_EXPECT_OK(ov_core_create(&core));
|
||||
EXPECT_NE(nullptr, core);
|
||||
|
||||
auto err_msg = ov_get_last_err_msg();
|
||||
EXPECT_EQ(nullptr, err_msg);
|
||||
ov_core_free(core);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
Loading…
Reference in New Issue
Block a user