From: Remi Collet <remi@remirepo.net>
Date: Fri, 4 Sep 2020 08:57:24 +0200
Subject: thread limit per request

---
 imagick-3.4.4+php8.0/imagick.c | 31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/imagick-3.4.4+php8.0/imagick.c b/imagick-3.4.4+php8.0/imagick.c
index 11ea7d4..d9dec77 100644
--- a/imagick-3.4.4+php8.0/imagick.c
+++ b/imagick-3.4.4+php8.0/imagick.c
@@ -473,10 +473,10 @@ PHP_IMAGICK_API zend_class_entry *php_imagickpixel_get_class_entry()
 		ZEND_ARG_OBJ_INFO(0, Imagick, Imagick, 0)
 		ZEND_ARG_INFO(0, CHANNEL)
 	ZEND_END_ARG_INFO()
-	
+
 	ZEND_BEGIN_ARG_INFO_EX(imagick_transformimagecolorspace_args, 0, 0, 1)
 		ZEND_ARG_INFO(0, COLORSPACE)
-	ZEND_END_ARG_INFO()	
+	ZEND_END_ARG_INFO()
 #endif
 
 #if MagickLibVersion > 0x655
@@ -502,7 +502,7 @@ PHP_IMAGICK_API zend_class_entry *php_imagickpixel_get_class_entry()
 	ZEND_BEGIN_ARG_INFO_EX(imagick_deleteimageartifact_args, 0, 0, 1)
 		ZEND_ARG_INFO(0, artifact)
 	ZEND_END_ARG_INFO()
-	
+
 	ZEND_BEGIN_ARG_INFO_EX(imagick_setcolorspace_args, 0, 0, 1)
 		ZEND_ARG_INFO(0, COLORSPACE)
 	ZEND_END_ARG_INFO()
@@ -524,7 +524,7 @@ PHP_IMAGICK_API zend_class_entry *php_imagickpixel_get_class_entry()
 	ZEND_BEGIN_ARG_INFO_EX(imagick_construct_args, 0, 0, 0)
 		ZEND_ARG_INFO(0, files)
 	ZEND_END_ARG_INFO()
-	
+
 	ZEND_BEGIN_ARG_INFO_EX(imagick_getpixelregioniterator_args, 0, 0, 5)
 		ZEND_ARG_INFO(0, x)
 		ZEND_ARG_INFO(0, y)
@@ -834,7 +834,7 @@ PHP_IMAGICK_API zend_class_entry *php_imagickpixel_get_class_entry()
 	ZEND_BEGIN_ARG_INFO_EX(imagick_setimageprogressmonitor_args, 0, 0, 1)
 		ZEND_ARG_INFO(0, filename)
 	ZEND_END_ARG_INFO()
-	
+
 	ZEND_BEGIN_ARG_INFO_EX(imagick_setprogressmonitor_args, 0, 0, 1)
 		ZEND_ARG_INFO(0, callback)
 	ZEND_END_ARG_INFO()
@@ -2200,7 +2200,7 @@ static zend_function_entry php_imagickdraw_class_methods[] =
 	PHP_ME(imagickdraw, gettextdirection, imagickdraw_zero_args, ZEND_ACC_PUBLIC)
 	PHP_ME(imagickdraw, settextdirection, imagickdraw_settextdirection_args, ZEND_ACC_PUBLIC)
 #endif //#if MagickLibVersion >= 0x692
-	
+
 	{ NULL, NULL, NULL, 0, 0 }
 };
 
@@ -2867,7 +2867,7 @@ static void php_imagick_object_free_storage(IM_ZEND_OBJECT *object TSRMLS_DC)
 	}
 
 	if (intern->progress_monitor_name) {
-		//TODO - is this meant to be free by us? 
+		//TODO - is this meant to be free by us?
 		efree(intern->progress_monitor_name);
 	}
 
@@ -3172,7 +3172,7 @@ static zend_object_value php_imagickpixel_object_new_ex(zend_class_entry *class_
 	intern->initialized_via_iterator = 0;
 	zend_object_std_init(&intern->zo, class_type TSRMLS_CC);
 	object_properties_init(&intern->zo, class_type);
-	
+
 #ifdef ZEND_ENGINE_3
 	intern->zo.handlers = &imagickpixel_object_handlers;
 
@@ -3380,7 +3380,7 @@ static zval *php_imagick_read_property(zval *object, zval *member, int type, con
 	ret = std_hnd->has_property(object, member, 2 TSRMLS_CC);
 #else
 	ret = std_hnd->has_property(object, member, 2, key TSRMLS_CC);
-#endif	
+#endif
 
 	if (ret) {
 		std_hnd = zend_get_std_object_handlers();
@@ -3505,7 +3505,7 @@ static zend_object_value php_imagick_clone_imagickpixel_object(zval *this_ptr TS
 	php_imagickpixel_object *old_obj = Z_IMAGICKPIXEL_P(this_ptr);
 	new_zo = php_imagickpixel_object_new_ex(old_obj->zo.ce, &new_obj TSRMLS_CC);
 	zend_objects_clone_members(&new_obj->zo, &old_obj->zo TSRMLS_CC);
-#else 
+#else
 	php_imagickpixel_object *old_obj = (php_imagickpixel_object *) zend_object_store_get_object(this_ptr TSRMLS_CC);
 	zend_object_value new_zo = php_imagickpixel_object_new_ex(old_obj->zo.ce, &new_obj TSRMLS_CC);
 	zend_objects_clone_members(&new_obj->zo, new_zo, &old_obj->zo, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC);
@@ -3742,8 +3742,6 @@ PHP_MINIT_FUNCTION(imagick)
 		checkImagickVersion();
 	}
 
-	SetMagickResourceLimit(ThreadResource, 1);
-
 	return SUCCESS;
 }
 
@@ -3753,7 +3751,7 @@ PHP_MINFO_FUNCTION(imagick)
 
 #ifdef ZEND_ENGINE_3
 	smart_string formats = {0};
-#else 
+#else
 	smart_str formats = {0};
 #endif
 
@@ -3800,7 +3798,7 @@ PHP_MINFO_FUNCTION(imagick)
 #endif
 			IMAGICK_FREE_MAGICK_MEMORY(supported_formats[i]);
 		}
-		
+
 #ifdef ZEND_ENGINE_3
 		smart_string_0(&formats);
 		php_info_print_table_row(2, "ImageMagick supported formats", formats.c);
@@ -3840,6 +3838,11 @@ PHP_RINIT_FUNCTION(imagick)
 	(void)module_number;
 
 	IMAGICK_G(progress_callback) = NULL;
+
+	if (IMAGICK_G(set_single_thread)) {
+		MagickSetResourceLimit(ThreadResource, 1);
+	}
+
 	return SUCCESS;
 }
 
