Skip to content

Commit f4f66a1

Browse files
committed
fixup! Fixed coverity in acl_hal_mmd.cpp: Resource leak (RESOURCE_LEAK)
1 parent 8411594 commit f4f66a1

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

include/acl_hal_mmd.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ struct aocl_mmd_streaming_kernel_arg_info_t {
5252
#define MMDVERSION_LESSTHAN(A, B) ((float)(A) < (float)(B))
5353

5454
typedef struct {
55-
struct library_deleter {
56-
void operator()(void *library);
57-
};
58-
59-
using library_pointer = std::unique_ptr<void, library_deleter>;
55+
using library_pointer = std::shared_ptr<void>;
6056

6157
std::string library_name;
6258
library_pointer mmd_library;

src/acl_hal_mmd.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -433,12 +433,14 @@ static void *my_dlsym(void *library, const char *function_name,
433433
return symbol;
434434
}
435435

436-
void acl_mmd_dispatch_t::library_deleter::operator()(void *library) {
436+
static void my_dlclose(void *library) {
437+
if (library) {
437438
#ifdef _WIN32
438-
FreeLibrary((HMODULE)library);
439+
FreeLibrary((HMODULE)library);
439440
#else
440-
dlclose(library);
441+
dlclose(library);
441442
#endif
443+
}
442444
}
443445

444446
cl_bool l_load_board_functions(acl_mmd_dispatch_t *mmd_dispatch,
@@ -574,7 +576,7 @@ cl_bool l_load_single_board_library(const char *library_name,
574576
}
575577
#endif
576578
acl_mmd_dispatch_t::library_pointer mmd_library{
577-
my_dlopen(library_name, &error_msg)};
579+
my_dlopen(library_name, &error_msg), my_dlclose};
578580
if (!mmd_library) {
579581
std::cout << "Error: Could not load board library " << library_name;
580582
if (error_msg && error_msg[0] != '\0') {
@@ -594,7 +596,7 @@ cl_bool l_load_single_board_library(const char *library_name,
594596
mmd_library.reset();
595597
ACL_HAL_DEBUG_MSG_VERBOSE(
596598
1, "This library is a custom library. Opening globally.\n");
597-
mmd_library.reset(my_dlopen_global(library_name, &error_msg));
599+
mmd_library.reset(my_dlopen_global(library_name, &error_msg), my_dlclose);
598600
if (!mmd_library) {
599601
std::cout << "Error: Could not load custom library " << library_name;
600602
if (error_msg && error_msg[0] != '\0') {
@@ -1162,7 +1164,7 @@ static acl_mmd_dispatch_t *get_msim_mmd_layer() {
11621164

11631165
char *error_msg = nullptr;
11641166
acl_mmd_dispatch_t::library_pointer mmd_lib{
1165-
my_dlopen(mmd_lib_name, &error_msg)};
1167+
my_dlopen(mmd_lib_name, &error_msg), my_dlclose};
11661168
typedef acl_mmd_dispatch_t *(*fcn_type)();
11671169
if (!mmd_lib) {
11681170
std::cout << "Error: Could not load simulation MMD library "

0 commit comments

Comments
 (0)