Skip to content

Commit

Permalink
fix: don't use static global in global destructor
Browse files Browse the repository at this point in the history
#675
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
  • Loading branch information
JablonskiMateusz authored and Compute-Runtime-Automation committed Sep 8, 2023
1 parent 98dae70 commit 4f68822
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 12 deletions.
5 changes: 2 additions & 3 deletions level_zero/core/source/global_teardown.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@

namespace L0 {
using zelSetDriverTeardown_fn = ze_result_t (*)();
static const std::string loaderLibraryFilename = "ze_loader";

void globalDriverTeardown();
ze_result_t setDriverTeardownHandleInLoader(std::string loaderLibraryName);
} // namespace L0
ze_result_t setDriverTeardownHandleInLoader(const char *);
} // namespace L0
9 changes: 4 additions & 5 deletions level_zero/core/source/linux/driver_teardown.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@

namespace L0 {

ze_result_t setDriverTeardownHandleInLoader(std::string loaderLibraryName) {
ze_result_t setDriverTeardownHandleInLoader(const char *loaderLibraryName) {
if (L0::LevelZeroDriverInitialized) {
ze_result_t result = ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
std::unique_ptr<NEO::OsLibrary> loaderLibrary = std::unique_ptr<NEO::OsLibrary>{NEO::OsLibrary::load(loaderLibraryName.c_str())};
std::unique_ptr<NEO::OsLibrary> loaderLibrary = std::unique_ptr<NEO::OsLibrary>{NEO::OsLibrary::load(loaderLibraryName)};
if (loaderLibrary) {
zelSetDriverTeardown_fn setDriverTeardown = reinterpret_cast<zelSetDriverTeardown_fn>(loaderLibrary->getProcAddress("zelSetDriverTeardown"));
if (setDriverTeardown) {
Expand All @@ -33,7 +33,6 @@ ze_result_t setDriverTeardownHandleInLoader(std::string loaderLibraryName) {
} // namespace L0

void __attribute__((destructor)) driverHandleDestructor() {
std::string loaderLibraryName = "lib" + L0::loaderLibraryFilename + ".so.1";
L0::setDriverTeardownHandleInLoader(loaderLibraryName);
L0::setDriverTeardownHandleInLoader("libze_loader.so.1");
L0::globalDriverTeardown();
}
}
7 changes: 3 additions & 4 deletions level_zero/core/source/windows/driver_teardown.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@

namespace L0 {

ze_result_t setDriverTeardownHandleInLoader(std::string loaderLibraryName) {
ze_result_t setDriverTeardownHandleInLoader(const char *loaderLibraryName) {
if (L0::LevelZeroDriverInitialized) {
HMODULE handle = nullptr;
ze_result_t result = ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE;
handle = GetModuleHandleA(loaderLibraryName.c_str());
handle = GetModuleHandleA(loaderLibraryName);
if (handle) {
zelSetDriverTeardown_fn setDriverTeardown = reinterpret_cast<zelSetDriverTeardown_fn>(GetProcAddress(handle, "zelSetDriverTeardown"));
if (setDriverTeardown) {
Expand All @@ -35,8 +35,7 @@ ze_result_t setDriverTeardownHandleInLoader(std::string loaderLibraryName) {

BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
if (fdwReason == DLL_PROCESS_DETACH) {
std::string loaderLibraryName = L0::loaderLibraryFilename + ".dll";
L0::setDriverTeardownHandleInLoader(loaderLibraryName);
L0::setDriverTeardownHandleInLoader("ze_loader.dll");
L0::globalDriverTeardown();
if (L0::GlobalOsSysmanDriver != nullptr) {
delete L0::GlobalOsSysmanDriver;
Expand Down

0 comments on commit 4f68822

Please sign in to comment.