[Bf-blender-cvs] [d04eb330e87] master: Close OpenEXR thread pool on exit

Sergey Sharybin noreply at git.blender.org
Tue Sep 18 11:14:21 CEST 2018


Commit: d04eb330e873488d8b7cbe49da5600d6f64ea6db
Author: Sergey Sharybin
Date:   Tue Sep 18 11:10:49 2018 +0200
Branches: master
https://developer.blender.org/rBd04eb330e873488d8b7cbe49da5600d6f64ea6db

Close OpenEXR thread pool on exit

This partially solves ASAN report about unfreed memory. There is still
something in the report, need to have a closer look with debug version
of OpenEXE library.

===================================================================

M	source/blender/imbuf/intern/filetype.c
M	source/blender/imbuf/intern/openexr/openexr_api.cpp
M	source/blender/imbuf/intern/openexr/openexr_api.h

===================================================================

diff --git a/source/blender/imbuf/intern/filetype.c b/source/blender/imbuf/intern/filetype.c
index 25bbd132a49..a5af51e3e95 100644
--- a/source/blender/imbuf/intern/filetype.c
+++ b/source/blender/imbuf/intern/filetype.c
@@ -74,7 +74,7 @@ const ImFileType IMB_FILE_TYPES[] = {
 	{NULL, NULL, imb_is_a_hdr, NULL, imb_ftype_default, imb_loadhdr, NULL, imb_savehdr, NULL, IM_FTYPE_FLOAT, IMB_FTYPE_RADHDR, COLOR_ROLE_DEFAULT_FLOAT},
 #endif
 #ifdef WITH_OPENEXR
-	{imb_initopenexr, NULL, imb_is_a_openexr, NULL, imb_ftype_default, imb_load_openexr, NULL, imb_save_openexr, NULL, IM_FTYPE_FLOAT, IMB_FTYPE_OPENEXR, COLOR_ROLE_DEFAULT_FLOAT},
+	{imb_initopenexr, imb_exitopenexr, imb_is_a_openexr, NULL, imb_ftype_default, imb_load_openexr, NULL, imb_save_openexr, NULL, IM_FTYPE_FLOAT, IMB_FTYPE_OPENEXR, COLOR_ROLE_DEFAULT_FLOAT},
 #endif
 #ifdef WITH_OPENJPEG
 	{NULL, NULL, imb_is_a_jp2, NULL, imb_ftype_default, imb_load_jp2, NULL, imb_save_jp2, NULL, IM_FTYPE_FLOAT, IMB_FTYPE_JP2, COLOR_ROLE_DEFAULT_BYTE},
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index e8e6e0576ed..bad5e0efd65 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -1921,4 +1921,12 @@ void imb_initopenexr(void)
 	setGlobalThreadCount(num_threads);
 }
 
+void imb_exitopenexr(void)
+{
+	/* Tells OpenEXR to free thread pool, also ensures there is no running
+	 * tasks.
+	 */
+	setGlobalThreadCount(0);
+}
+
 } // export "C"
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.h b/source/blender/imbuf/intern/openexr/openexr_api.h
index 92bbeecfd5d..32d276b31ea 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.h
+++ b/source/blender/imbuf/intern/openexr/openexr_api.h
@@ -40,6 +40,7 @@ extern "C" {
 #include <stdio.h>
 
 void		imb_initopenexr					(void);
+void		imb_exitopenexr					(void);
 
 int		imb_is_a_openexr			(const unsigned char *mem);



More information about the Bf-blender-cvs mailing list