diff --git a/level_zero/core/source/windows/driver_teardown.cpp b/level_zero/core/source/windows/driver_teardown.cpp index 8391df817d..76cf20a8e1 100644 --- a/level_zero/core/source/windows/driver_teardown.cpp +++ b/level_zero/core/source/windows/driver_teardown.cpp @@ -17,10 +17,14 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { L0::globalDriverSetup(); } if (fdwReason == DLL_PROCESS_DETACH) { - L0::globalDriverTeardown(); - if (L0::globalOsSysmanDriver != nullptr) { - delete L0::globalOsSysmanDriver; - L0::globalOsSysmanDriver = nullptr; + /* If lpvReserved is non-NULL with DLL_PROCESS_DETACH, the process is terminating, + * cleanup should be skipped according to the DllMain spec. */ + if (!lpvReserved) { + L0::globalDriverTeardown(); + if (L0::globalOsSysmanDriver != nullptr) { + delete L0::globalOsSysmanDriver; + L0::globalOsSysmanDriver = nullptr; + } } } return TRUE;