@@ -433,12 +433,14 @@ static void *my_dlsym(void *library, const char *function_name,
433
433
return symbol;
434
434
}
435
435
436
- void acl_mmd_dispatch_t::library_deleter::operator ()(void *library) {
436
+ static void my_dlclose (void *library) {
437
+ if (library) {
437
438
#ifdef _WIN32
438
- FreeLibrary ((HMODULE)library);
439
+ FreeLibrary ((HMODULE)library);
439
440
#else
440
- dlclose (library);
441
+ dlclose (library);
441
442
#endif
443
+ }
442
444
}
443
445
444
446
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,
574
576
}
575
577
#endif
576
578
acl_mmd_dispatch_t ::library_pointer mmd_library{
577
- my_dlopen (library_name, &error_msg)};
579
+ my_dlopen (library_name, &error_msg), my_dlclose };
578
580
if (!mmd_library) {
579
581
std::cout << " Error: Could not load board library " << library_name;
580
582
if (error_msg && error_msg[0 ] != ' \0 ' ) {
@@ -594,7 +596,7 @@ cl_bool l_load_single_board_library(const char *library_name,
594
596
mmd_library.reset ();
595
597
ACL_HAL_DEBUG_MSG_VERBOSE (
596
598
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 );
598
600
if (!mmd_library) {
599
601
std::cout << " Error: Could not load custom library " << library_name;
600
602
if (error_msg && error_msg[0 ] != ' \0 ' ) {
@@ -1162,7 +1164,7 @@ static acl_mmd_dispatch_t *get_msim_mmd_layer() {
1162
1164
1163
1165
char *error_msg = nullptr ;
1164
1166
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 };
1166
1168
typedef acl_mmd_dispatch_t *(*fcn_type)();
1167
1169
if (!mmd_lib) {
1168
1170
std::cout << " Error: Could not load simulation MMD library "
0 commit comments