summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--b29c54505a93365441fa140b152a651c3b9324c2.patch287
-rw-r--r--php-pecl-imagick.spec26
2 files changed, 3 insertions, 310 deletions
diff --git a/b29c54505a93365441fa140b152a651c3b9324c2.patch b/b29c54505a93365441fa140b152a651c3b9324c2.patch
deleted file mode 100644
index 4d4ba4d..0000000
--- a/b29c54505a93365441fa140b152a651c3b9324c2.patch
+++ /dev/null
@@ -1,287 +0,0 @@
-From b29c54505a93365441fa140b152a651c3b9324c2 Mon Sep 17 00:00:00 2001
-From: Danack <Danack@basereality.com>
-Date: Tue, 30 Jul 2019 15:20:15 +0100
-Subject: [PATCH] Add ini settings to work around segfault.
-
-Added the 'imagick.shutdown_sleep_count' (default 10) and 'imagick.set_single_thread' (default Off) to work around a segfault in OpenMP.
----
- imagick.c | 22 ++++++++++++-
- package.xml | 5 +++
- php_imagick_defs.h | 4 +++
- tests/281_ini_settings_default.phpt | 29 ++++++++++++++++
- tests/282_ini_settings_set_falsy_string.phpt | 33 +++++++++++++++++++
- tests/283_ini_settings_set_falsy_zero.phpt | 33 +++++++++++++++++++
- tests/284_ini_settings_set_truthy_number.phpt | 33 +++++++++++++++++++
- tests/285_ini_settings_set_truthy_string.phpt | 33 +++++++++++++++++++
- 8 files changed, 191 insertions(+), 1 deletion(-)
- create mode 100644 tests/281_ini_settings_default.phpt
- create mode 100644 tests/282_ini_settings_set_falsy_string.phpt
- create mode 100644 tests/283_ini_settings_set_falsy_zero.phpt
- create mode 100644 tests/284_ini_settings_set_truthy_number.phpt
- create mode 100644 tests/285_ini_settings_set_truthy_string.phpt
-
-diff --git a/imagick.c b/imagick.c
-index 8e58afe..be6b303 100644
---- a/imagick.c
-+++ b/imagick.c
-@@ -3262,6 +3262,10 @@ PHP_INI_BEGIN()
- STD_PHP_INI_ENTRY("imagick.locale_fix", "0", PHP_INI_ALL, OnUpdateBool, locale_fix, zend_imagick_globals, imagick_globals)
- STD_PHP_INI_ENTRY("imagick.skip_version_check", "0", PHP_INI_ALL, OnUpdateBool, skip_version_check, zend_imagick_globals, imagick_globals)
- STD_PHP_INI_ENTRY("imagick.progress_monitor", "0", PHP_INI_SYSTEM, OnUpdateBool, progress_monitor, zend_imagick_globals, imagick_globals)
-+
-+ STD_PHP_INI_ENTRY("imagick.set_single_thread", "0", PHP_INI_SYSTEM, OnUpdateBool, set_single_thread, zend_imagick_globals, imagick_globals)
-+ STD_PHP_INI_ENTRY("imagick.shutdown_sleep_count", "10", PHP_INI_ALL, OnUpdateLong, shutdown_sleep_count, zend_imagick_globals, imagick_globals)
-+
- PHP_INI_END()
-
- static void php_imagick_init_globals(zend_imagick_globals *imagick_globals)
-@@ -3269,6 +3273,9 @@ static void php_imagick_init_globals(zend_imagick_globals *imagick_globals)
- imagick_globals->locale_fix = 0;
- imagick_globals->progress_monitor = 0;
- imagick_globals->skip_version_check = 0;
-+ imagick_globals->set_single_thread = 0;
-+ // 10 is magick number, that seems to be enough.
-+ imagick_globals->shutdown_sleep_count = 10;
- }
-
-
-@@ -3748,6 +3755,10 @@ PHP_MINIT_FUNCTION(imagick)
- checkImagickVersion();
- }
-
-+ if (IMAGICK_G(set_single_thread)) {
-+ MagickSetResourceLimit(ThreadResource, 1);
-+ }
-+
- return SUCCESS;
- }
-
-@@ -3824,12 +3835,21 @@ PHP_MINFO_FUNCTION(imagick)
-
- PHP_MSHUTDOWN_FUNCTION(imagick)
- {
-+ int i;
-+
- // This suppresses an 'unused parameter' warning.
- (void)type;
-
--
- MagickWandTerminus();
-
-+ // 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
-+ // against a version of OpenMP that has omp_pause_resource_all()
-+ for (i = 0; i < 100 && i < IMAGICK_G(shutdown_sleep_count); i += 1) {
-+ usleep(1000);
-+ }
-+
- #if defined(ZTS) && defined(PHP_WIN32)
- tsrm_mutex_free(imagick_mutex);
- #endif
-diff --git a/php_imagick_defs.h b/php_imagick_defs.h
-index 5eb57e5..dbc9c52 100644
---- a/php_imagick_defs.h
-+++ b/php_imagick_defs.h
-@@ -83,6 +83,10 @@ ZEND_BEGIN_MODULE_GLOBALS(imagick)
- zend_bool locale_fix;
- zend_bool progress_monitor;
- zend_bool skip_version_check;
-+
-+ zend_bool set_single_thread;
-+ zend_long shutdown_sleep_count;
-+
- php_imagick_callback *progress_callback;
- #ifdef PHP_IMAGICK_ZEND_MM
- MagickWand *keep_alive;
-diff --git a/tests/281_ini_settings_default.phpt b/tests/281_ini_settings_default.phpt
-new file mode 100644
-index 0000000..e397e98
---- /dev/null
-+++ b/tests/281_ini_settings_default.phpt
-@@ -0,0 +1,29 @@
-+--TEST--
-+OpenMP segfault hacks
-+--SKIPIF--
-+<?php
-+
-+
-+require_once(dirname(__FILE__) . '/skipif.inc');
-+
-+?>
-+--FILE--
-+<?php
-+
-+
-+$sleepCount = ini_get('imagick.shutdown_sleep_count');
-+$setSingleThread = ini_get('imagick.set_single_thread');
-+
-+if ($sleepCount != 10) {
-+ echo "imagick.shutdown_sleep_count is not set to 10 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+if ($setSingleThread != 0) {
-+ echo "imagick.set_single_thread setting is not false but instead " . var_export($setSingleThread, true) ."\n";
-+}
-+
-+
-+echo "Complete".PHP_EOL;
-+?>
-+--EXPECTF--
-+Complete
-diff --git a/tests/282_ini_settings_set_falsy_string.phpt b/tests/282_ini_settings_set_falsy_string.phpt
-new file mode 100644
-index 0000000..c5f6bfd
---- /dev/null
-+++ b/tests/282_ini_settings_set_falsy_string.phpt
-@@ -0,0 +1,33 @@
-+--TEST--
-+OpenMP segfault hacks
-+
-+--INI--
-+imagick.shutdown_sleep_count=Off
-+imagick.set_single_thread=0
-+--SKIPIF--
-+<?php
-+
-+
-+require_once(dirname(__FILE__) . '/skipif.inc');
-+
-+?>
-+--FILE--
-+<?php
-+
-+
-+$sleepCount = ini_get('imagick.shutdown_sleep_count');
-+$setSingleThread = ini_get('imagick.set_single_thread');
-+
-+if ($sleepCount != 0) {
-+ echo "imagick.shutdown_sleep_count is not set to 0 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+if ($setSingleThread != 0) {
-+ echo "imagick.set_single_thread setting is not 0 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+
-+echo "Complete".PHP_EOL;
-+?>
-+--EXPECTF--
-+Complete
-diff --git a/tests/283_ini_settings_set_falsy_zero.phpt b/tests/283_ini_settings_set_falsy_zero.phpt
-new file mode 100644
-index 0000000..8e41a35
---- /dev/null
-+++ b/tests/283_ini_settings_set_falsy_zero.phpt
-@@ -0,0 +1,33 @@
-+--TEST--
-+OpenMP segfault hacks
-+
-+--INI--
-+imagick.shutdown_sleep_count=0
-+imagick.set_single_thread=0
-+--SKIPIF--
-+<?php
-+
-+
-+require_once(dirname(__FILE__) . '/skipif.inc');
-+
-+?>
-+--FILE--
-+<?php
-+
-+
-+$sleepCount = ini_get('imagick.shutdown_sleep_count');
-+$setSingleThread = ini_get('imagick.set_single_thread');
-+
-+if ($sleepCount != 0) {
-+ echo "imagick.shutdown_sleep_count is not set to 10 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+if ($setSingleThread != 0) {
-+ echo "imagick.set_single_thread setting is not false but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+
-+echo "Complete".PHP_EOL;
-+?>
-+--EXPECTF--
-+Complete
-diff --git a/tests/284_ini_settings_set_truthy_number.phpt b/tests/284_ini_settings_set_truthy_number.phpt
-new file mode 100644
-index 0000000..fc0a0bb
---- /dev/null
-+++ b/tests/284_ini_settings_set_truthy_number.phpt
-@@ -0,0 +1,33 @@
-+--TEST--
-+OpenMP segfault hacks
-+
-+--INI--
-+imagick.shutdown_sleep_count=20
-+imagick.set_single_thread=1
-+--SKIPIF--
-+<?php
-+
-+
-+require_once(dirname(__FILE__) . '/skipif.inc');
-+
-+?>
-+--FILE--
-+<?php
-+
-+
-+$sleepCount = intval(ini_get('imagick.shutdown_sleep_count'));
-+$setSingleThread = ini_get('imagick.set_single_thread');
-+
-+if ($sleepCount != 20) {
-+ echo "imagick.shutdown_sleep_count is not set to 10 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+if ($setSingleThread != 1) {
-+ echo "imagick.set_single_thread setting is not true but instead " . var_export($setSingleThread, true) ."\n";
-+}
-+
-+
-+echo "Complete".PHP_EOL;
-+?>
-+--EXPECTF--
-+Complete
-diff --git a/tests/285_ini_settings_set_truthy_string.phpt b/tests/285_ini_settings_set_truthy_string.phpt
-new file mode 100644
-index 0000000..c35a213
---- /dev/null
-+++ b/tests/285_ini_settings_set_truthy_string.phpt
-@@ -0,0 +1,33 @@
-+--TEST--
-+OpenMP segfault hacks
-+
-+--INI--
-+imagick.shutdown_sleep_count=On
-+imagick.set_single_thread=On
-+--SKIPIF--
-+<?php
-+
-+
-+require_once(dirname(__FILE__) . '/skipif.inc');
-+
-+?>
-+--FILE--
-+<?php
-+
-+
-+$sleepCount = intval(ini_get('imagick.shutdown_sleep_count'));
-+$setSingleThread = ini_get('imagick.set_single_thread');
-+
-+if ($sleepCount != 1) {
-+ echo "imagick.shutdown_sleep_count is not set to 1 but instead " . var_export($sleepCount, true) ."\n";
-+}
-+
-+if ($setSingleThread != 1) {
-+ echo "imagick.set_single_thread setting is not true but instead " . var_export($setSingleThread, true) ."\n";
-+}
-+
-+
-+echo "Complete".PHP_EOL;
-+?>
-+--EXPECTF--
-+Complete
diff --git a/php-pecl-imagick.spec b/php-pecl-imagick.spec
index f94c157..79297a9 100644
--- a/php-pecl-imagick.spec
+++ b/php-pecl-imagick.spec
@@ -40,7 +40,7 @@ Version: %{upstream_version}%{?upstream_prever:~%{upstream_prever}}
Release: 0.8.%{gh_date}git%{gh_short}%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{pecl_name}-%{version}-%{gh_short}.tar.gz
%else
-Release: 8%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
+Release: 7%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
Source0: http://pecl.php.net/get/%{pecl_name}-%{upstream_version}%{?upstream_prever}.tgz
%endif
License: PHP
@@ -50,7 +50,6 @@ Patch0: https://patch-diff.githubusercontent.com/raw/Imagick/imagick/pull
Patch1: https://patch-diff.githubusercontent.com/raw/Imagick/imagick/pull/291.patch
Patch2: https://patch-diff.githubusercontent.com/raw/Imagick/imagick/pull/296.patch
Patch3: https://patch-diff.githubusercontent.com/raw/Imagick/imagick/pull/302.patch
-Patch4: https://github.com/Imagick/imagick/commit/b29c54505a93365441fa140b152a651c3b9324c2.patch
BuildRequires: %{?dtsprefix}gcc
BuildRequires: %{?scl_prefix}php-devel > 5.4
@@ -169,10 +168,9 @@ cd NTS
%patch0 -p1
%patch1 -p1
%if "%{php_version}" > "7.4"
-#patch2 -p1
+%patch2 -p1
%endif
%patch3 -p1
-%patch4 -p1
extver=$(sed -n '/#define PHP_IMAGICK_VERSION/{s/.* "//;s/".*$//;p}' php_imagick.h)
if test "x${extver}" != "x%{upstream_version}%{?upstream_prever}"; then
@@ -188,24 +186,13 @@ extension = %{pecl_name}.so
; Documentation: http://php.net/imagick
; Don't check builtime and runtime versions of ImageMagick
-; Default value:0
imagick.skip_version_check=1
; Fixes a drawing bug with locales that use ',' as float separators.
-; Default value:0
;imagick.locale_fix=0
; Used to enable the image progress monitor.
-; Default value:0
;imagick.progress_monitor=0
-
-; Allow or disallow ImageMagick to use multiple threads
-; Default value:0
-imagick.set_single_thread=1
-
-; Hack to ensure all threads have ended
-; Default value:10
-imagick.shutdown_sleep_count=0
EOF
%if %{with_zts}
@@ -284,8 +271,6 @@ export REPORT_EXIT_STATUS=1
# very long, and erratic results, sometime timeout
rm ?TS/tests/229_Tutorial_fxAnalyzeImage_case1.phpt
-# as we force set_single_thread
-rm ?TS/tests/281_ini_settings_default.phpt
: simple module load test for NTS extension
cd NTS
@@ -296,7 +281,7 @@ cd NTS
: upstream test suite for NTS extension
TEST_PHP_EXECUTABLE=%{__php} \
-TEST_PHP_ARGS="-n -d extension=%{buildroot}%{php_extdir}/%{pecl_name}.so -d imagick.set_single_thread=1 -d imagick.shutdown_sleep_count=0" \
+TEST_PHP_ARGS="-n -d extension=%{buildroot}%{php_extdir}/%{pecl_name}.so" \
%{__php} -n run-tests.php -q --show-diff
%if %{with_zts}
@@ -332,11 +317,6 @@ cd ../ZTS
%changelog
-* Mon Nov 25 2019 Remi Collet <remi@remirepo.net> - 3.4.4-8
-- add upstream patch to workaround #295 instead of PR#296
-- set new option imagick.set_single_thread to 1
-- set new option imagick.shutdown_sleep_count to 0
-
* Tue Oct 29 2019 Remi Collet <remi@remirepo.net> - 3.4.4-7
- add patch for latest ImageMagick from
https://github.com/Imagick/imagick/pull/302