From 8e305b0035df336620f66d0ca4bb2a162a4977ed Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 25 Jan 2021 08:39:31 +0100 Subject: [PATCH 1/2] call omp_pause_resource_all when available --- config.m4 | 2 ++ imagick.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/config.m4 b/config.m4 index 15260dc..dfb73a1 100644 --- a/config.m4 +++ b/config.m4 @@ -58,6 +58,8 @@ IM_FIND_IMAGEMAGICK([6.2.4], [$PHP_IMAGICK]) LIBS=$old_LIBS + PHP_CHECK_FUNC(omp_pause_resource_all, gomp) + PHP_SUBST(IMAGICK_SHARED_LIBADD) AC_DEFINE(HAVE_IMAGICK,1,[ ]) PHP_NEW_EXTENSION(imagick, imagick_file.c imagick_class.c imagickdraw_class.c imagickpixel_class.c imagickpixeliterator_class.c imagick_helpers.c imagick.c imagickkernel_class.c shim_im6_to_im7.c, $ext_shared,, $IM_IMAGEMAGICK_CFLAGS) diff --git a/imagick.c b/imagick.c index cd7f98e..5822b36 100644 --- a/imagick.c +++ b/imagick.c @@ -35,6 +35,10 @@ /* For the countable interface */ #include "ext/spl/spl_iterators.h" +#if HAVE_OMP_PAUSE_RESOURCE_ALL +#include +#endif + ZEND_DECLARE_MODULE_GLOBALS(imagick) #ifdef IMAGICK_WITH_KERNEL @@ -3953,6 +3957,9 @@ PHP_MSHUTDOWN_FUNCTION(imagick) MagickWandTerminus(); +#if HAVE_OMP_PAUSE_RESOURCE_ALL + omp_pause_resource_all(omp_pause_hard); +#else // Sleep for a bit to hopefully allow OpenMP to // shut down the threads it created, and avoid a segfault // This hack won't be needed once everyone is compiling ImageMagick @@ -3960,6 +3967,7 @@ PHP_MSHUTDOWN_FUNCTION(imagick) for (i = 0; i < 100 && i < IMAGICK_G(shutdown_sleep_count); i += 1) { usleep(1000); } +#endif #if defined(ZTS) && defined(PHP_WIN32) tsrm_mutex_free(imagick_mutex); From 071d6441ba02664e50cf021f8653b8e4d3014608 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 25 Jan 2021 15:15:14 +0100 Subject: [PATCH 2/2] improve check --- config.m4 | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/config.m4 b/config.m4 index dfb73a1..b92db01 100644 --- a/config.m4 +++ b/config.m4 @@ -58,7 +58,18 @@ IM_FIND_IMAGEMAGICK([6.2.4], [$PHP_IMAGICK]) LIBS=$old_LIBS - PHP_CHECK_FUNC(omp_pause_resource_all, gomp) + AC_MSG_CHECKING(omp_pause_resource_all usability) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + #include + ]],[[ + omp_pause_resource_all(omp_pause_hard); + ]])],[ + AC_MSG_RESULT(yes) + PHP_CHECK_FUNC(omp_pause_resource_all, gomp) + PHP_ADD_LIBRARY(gomp,, GMAGICK_SHARED_LIBADD) + ],[ + AC_MSG_RESULT(no) + ]) PHP_SUBST(IMAGICK_SHARED_LIBADD) AC_DEFINE(HAVE_IMAGICK,1,[ ])