diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/Unit.cpp | 5 | ||||
-rw-r--r-- | common/Unit.hpp | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/common/Unit.cpp b/common/Unit.cpp index 5dc01d4eae..875c976866 100644 --- a/common/Unit.cpp +++ b/common/Unit.cpp @@ -26,7 +26,7 @@ #include <common/SigUtil.hpp> UnitBase *UnitBase::Global = nullptr; - +char * UnitBase::UnitLibPath; static std::thread TimeoutThread; static std::atomic<bool> TimeoutThreadRunning(false); std::timed_mutex TimeoutThreadMutex; @@ -41,6 +41,9 @@ UnitBase *UnitBase::linkAndCreateUnit(UnitType type, const std::string &unitLibP return nullptr; } + // avoid std:string de-allocation during failure / exit. + UnitLibPath = strdup(unitLibPath.c_str()); + const char *symbol = nullptr; switch (type) { diff --git a/common/Unit.hpp b/common/Unit.hpp index 63975514b9..c403100c2f 100644 --- a/common/Unit.hpp +++ b/common/Unit.hpp @@ -138,11 +138,17 @@ public: return *Global; } + static std::string getUnitLibPath() { return std::string(UnitLibPath); } + private: - void setHandle(void *dlHandle) { _dlHandle = dlHandle; } + void setHandle(void *dlHandle) + { + _dlHandle = dlHandle; + } static UnitBase *linkAndCreateUnit(UnitType type, const std::string& unitLibPath); void *_dlHandle; + static char *UnitLibPath; bool _setRetValue; int _retValue; int _timeoutMilliSeconds; |