-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
After much debugging, it turns out that OpenBlas is sometimes hanging on exit due to bad assumptions in its thread management. The upstream discussion is at OpenMathLib/OpenBLAS#2350, but this should fix our frequent win32 CI failures in the meantime.
- Loading branch information
Showing
2 changed files
with
40 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
commit 67bdd1b07c8fe880b2813c96849444b3dea67860 | ||
Author: Keno Fischer <[email protected]> | ||
Date: Sun Dec 29 15:08:13 2019 -0500 | ||
|
||
win32: Don't run cleanup if we're about to exit anyway | ||
|
||
If the process is about to exit, there's no point trying to do | ||
a bunch of work to clean up resources. The kernel will release | ||
them much more efficiently when the process exits at the end | ||
of this function. | ||
|
||
diff --git a/exports/dllinit.c b/exports/dllinit.c | ||
index 02ff092e..b65fe0c6 100644 | ||
--- a/exports/dllinit.c | ||
+++ b/exports/dllinit.c | ||
@@ -42,13 +42,17 @@ void gotoblas_init(void); | ||
void gotoblas_quit(void); | ||
|
||
BOOL APIENTRY DllMain(HINSTANCE hInst, DWORD reason, LPVOID reserved) { | ||
+<<<<<<< HEAD | ||
|
||
if (reason == DLL_PROCESS_ATTACH) { | ||
gotoblas_init(); | ||
} | ||
|
||
if (reason == DLL_PROCESS_DETACH) { | ||
- gotoblas_quit(); | ||
+ // If the process is about to exit, don't bother releasing any resources | ||
+ // The kernel is much better at bulk releasing then. | ||
+ if (!reserved) | ||
+ gotoblas_quit(); | ||
} | ||
|
||
return TRUE; |