From d04eb330e873488d8b7cbe49da5600d6f64ea6db Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 18 Sep 2018 11:10:49 +0200 Subject: 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. --- source/blender/imbuf/intern/filetype.c | 2 +- source/blender/imbuf/intern/openexr/openexr_api.cpp | 8 ++++++++ source/blender/imbuf/intern/openexr/openexr_api.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) (limited to 'source') 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 void imb_initopenexr (void); +void imb_exitopenexr (void); int imb_is_a_openexr (const unsigned char *mem); -- cgit v1.2.3