35 void* DynamicLoader::dlRegisterHandle(
void* handle,
const std::string& libFile) {
36 if (handle !=
nullptr) {
37 if (!dlOpenedLibraries.contains(handle)) {
38 dlOpenedLibraries[handle].fileName = libFile;
39 dlOpenedLibraries[handle].handle = handle;
41 LOG(TRACE) <<
"DynLoader: dlOpen: " << libFile <<
": success";
43 LOG(TRACE) <<
"DynLoader: dlOpen: " << DynamicLoader::dlError();
49 void DynamicLoader::dlCloseDelayed(
void* handle) {
50 if (handle !=
nullptr) {
51 if (dlOpenedLibraries.contains(handle)) {
52 if (std::find(closeHandles.begin(), closeHandles.end(), handle) == closeHandles.end()) {
53 LOG(TRACE) <<
"DynLoader: dlCloseDelayed: " << dlOpenedLibraries[handle].fileName;
55 closeHandles.push_back(handle);
57 LOG(TRACE) <<
"DynLoader: dlCloseDelayed: " << dlOpenedLibraries[handle].fileName <<
": already registered: ";
60 LOG(TRACE) <<
"DynLoader: dlCloseDelayed: " << handle <<
": not opened using dlOpen";
63 LOG(TRACE) <<
"DynLoader: dlCloseDelayed: handle is nullptr";
110 void DynamicLoader::execDlCloseDeleyed() {
111 if (!closeHandles.empty()) {
112 LOG(TRACE) <<
"DynLoader: execDlCloseDeleyed";
114 for (
void* handle : closeHandles) {
115 dlClose(dlOpenedLibraries[handle]);
116 dlOpenedLibraries.erase(handle);
119 closeHandles.clear();
121 LOG(TRACE) <<
"DynLoader: execDlCloseDeleyed done";