diff options
-rw-r--r-- | auto/modules/php | 27 | ||||
-rw-r--r-- | src/nxt_php_sapi.c | 8 |
2 files changed, 32 insertions, 3 deletions
diff --git a/auto/modules/php b/auto/modules/php index 5d54c119..362bbc69 100644 --- a/auto/modules/php +++ b/auto/modules/php @@ -124,6 +124,30 @@ if /bin/sh -c "${NXT_PHP_CONFIG} --version" >> $NXT_AUTOCONF_ERR 2>&1; then exit 1; fi + # Bug #71041 (https://bugs.php.net/bug.php?id=71041). + + nxt_feature="PHP zend_signal_startup()" + nxt_feature_name="" + nxt_feature_run=no + nxt_feature_incs="${NXT_PHP_INCLUDE}" + nxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}" + nxt_feature_test=" + #include <php.h> + #include <php_main.h> + + int main() { + zend_signal_startup(); + return 0; + }" + + . auto/feature + + if [ $nxt_found = yes ]; then + NXT_ZEND_SIGNAL_STARTUP=1 + else + NXT_ZEND_SIGNAL_STARTUP=0 + fi + else $echo $echo $0: error: no PHP found. @@ -181,6 +205,7 @@ for nxt_src in $NXT_PHP_MODULE_SRCS; do $NXT_BUILD_DIR/$nxt_obj: $nxt_src \$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_PHP_INCLUDE \\ + -DNXT_ZEND_SIGNAL_STARTUP=$NXT_ZEND_SIGNAL_STARTUP \\ $nxt_dep_flags \\ -o $NXT_BUILD_DIR/$nxt_obj $nxt_src $nxt_dep_post @@ -191,7 +216,7 @@ END done - + cat << END >> $NXT_MAKEFILE .PHONY: ${NXT_PHP_MODULE} diff --git a/src/nxt_php_sapi.c b/src/nxt_php_sapi.c index fbddd779..47b5ff04 100644 --- a/src/nxt_php_sapi.c +++ b/src/nxt_php_sapi.c @@ -270,10 +270,14 @@ nxt_php_init(nxt_task_t *task, nxt_common_app_conf_t *conf) tsrm_ls = ts_resource(0); #endif -#ifdef NXT_PHP7 -#if defined(ZEND_SIGNALS) || PHP_MINOR_VERSION > 0 +#if defined(NXT_PHP7) && defined(ZEND_SIGNALS) + +#if (NXT_ZEND_SIGNAL_STARTUP) zend_signal_startup(); +#elif defined(ZTS) +#error PHP is built with thread safety and broken signals. #endif + #endif sapi_startup(&nxt_php_sapi_module); |