diff --git a/deps/blas.mk b/deps/blas.mk index cd6026319c5dc2..89656c18443650 100644 --- a/deps/blas.mk +++ b/deps/blas.mk @@ -99,7 +99,12 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-skylakexdgemm.patch-applied: $(BUILDDIR patch -p1 -f < $(SRCDIR)/patches/openblas-skylakexdgemm.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-skylakexdgemm.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-winexit.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/source-extracted + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-winexit.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-skylakexdgemm.patch-applied $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-winexit.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/openblas-winexit.patch b/deps/patches/openblas-winexit.patch new file mode 100644 index 00000000000000..feb610879e1e74 --- /dev/null +++ b/deps/patches/openblas-winexit.patch @@ -0,0 +1,34 @@ +commit 67bdd1b07c8fe880b2813c96849444b3dea67860 +Author: Keno Fischer +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;