Skip to content

Commit be55ff1

Browse files
committed
Always use Zend signal handling
Being able to choose whether Zend signal handling should be used or not does not benefit users (or packagers) of PHP in any way. The use of Zend SH is a purely internal implementation detail, so there is no need for the build config parameters --{disable,enable}-zend-signals. By just choosing one way to do things (in this case, always using Zend signal handling), we can simplify the codebase a bit. Of course, some platforms do not have the concept of signals and signal handlers at all. That is why previously, Zend signal handling was automatically disabled if the platform did not have `sigaction`. In harmony with that, we now guard the implementation of Zend signal handling with `#ifdef HAVE_SIGACTION`.
1 parent 1f3c395 commit be55ff1

File tree

13 files changed

+18
-67
lines changed

13 files changed

+18
-67
lines changed

Zend/Zend.m4

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -303,23 +303,6 @@ AC_MSG_RESULT(done)
303303
304304
AC_CHECK_FUNCS(mremap)
305305
306-
AC_ARG_ENABLE([zend-signals],
307-
[AS_HELP_STRING([--disable-zend-signals],
308-
[whether to enable zend signal handling])],
309-
[ZEND_SIGNALS=$enableval],
310-
[ZEND_SIGNALS=yes])
311-
312-
AC_CHECK_FUNCS([sigaction], [], [
313-
ZEND_SIGNALS=no
314-
])
315-
if test "$ZEND_SIGNALS" = "yes"; then
316-
AC_DEFINE(ZEND_SIGNALS, 1, [Use zend signal handling])
317-
CFLAGS="$CFLAGS -DZEND_SIGNALS"
318-
fi
319-
320-
AC_MSG_CHECKING(whether to enable zend signal handling)
321-
AC_MSG_RESULT($ZEND_SIGNALS)
322-
323306
])
324307

325308
AC_MSG_CHECKING(whether /dev/urandom exists)

Zend/zend.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,7 @@ ZEND_INI_BEGIN()
165165
STD_ZEND_INI_BOOLEAN("zend.multibyte", "0", ZEND_INI_PERDIR, OnUpdateBool, multibyte, zend_compiler_globals, compiler_globals)
166166
ZEND_INI_ENTRY("zend.script_encoding", NULL, ZEND_INI_ALL, OnUpdateScriptEncoding)
167167
STD_ZEND_INI_BOOLEAN("zend.detect_unicode", "1", ZEND_INI_ALL, OnUpdateBool, detect_unicode, zend_compiler_globals, compiler_globals)
168-
#ifdef ZEND_SIGNALS
169168
STD_ZEND_INI_BOOLEAN("zend.signal_check", "0", ZEND_INI_SYSTEM, OnUpdateBool, check, zend_signal_globals_t, zend_signal_globals)
170-
#endif
171169
STD_ZEND_INI_BOOLEAN("zend.exception_ignore_args", "0", ZEND_INI_ALL, OnUpdateBool, exception_ignore_args, zend_executor_globals, executor_globals)
172170
ZEND_INI_END()
173171

Zend/zend_execute_API.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,24 +1302,7 @@ static void zend_set_timeout_ex(zend_long seconds, int reset_signals) /* {{{ */
13021302
# endif
13031303

13041304
if (reset_signals) {
1305-
# ifdef ZEND_SIGNALS
13061305
zend_signal(signo, zend_timeout_handler);
1307-
# else
1308-
sigset_t sigset;
1309-
# ifdef HAVE_SIGACTION
1310-
struct sigaction act;
1311-
1312-
act.sa_handler = zend_timeout_handler;
1313-
sigemptyset(&act.sa_mask);
1314-
act.sa_flags = SA_RESETHAND | SA_NODEFER;
1315-
sigaction(signo, &act, NULL);
1316-
# else
1317-
signal(signo, zend_timeout_handler);
1318-
# endif /* HAVE_SIGACTION */
1319-
sigemptyset(&sigset);
1320-
sigaddset(&sigset, signo);
1321-
sigprocmask(SIG_UNBLOCK, &sigset, NULL);
1322-
# endif /* ZEND_SIGNALS */
13231306
}
13241307
}
13251308
#endif /* HAVE_SETITIMER */

Zend/zend_signal.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#include <unistd.h>
3737
#endif
3838

39-
#ifdef ZEND_SIGNALS
39+
#ifdef HAVE_SIGACTION
4040

4141
#include "zend_signal.h"
4242

@@ -441,5 +441,9 @@ ZEND_API void zend_signal_startup(void)
441441
}
442442
/* }}} */
443443

444+
ZEND_API void zend_signal_disable_debug(void)
445+
{
446+
SIGG(check) = 0;
447+
}
444448

445-
#endif /* ZEND_SIGNALS */
449+
#endif /* HAVE_SIGACTION */

Zend/zend_signal.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#ifndef ZEND_SIGNAL_H
2222
#define ZEND_SIGNAL_H
2323

24-
#ifdef ZEND_SIGNALS
24+
#ifdef HAVE_SIGACTION
2525

2626
#include <signal.h>
2727

@@ -89,11 +89,16 @@ BEGIN_EXTERN_C()
8989
ZEND_API void zend_signal_startup(void);
9090
END_EXTERN_C()
9191
void zend_signal_init(void);
92+
ZEND_API void zend_signal_disable_debug(void);
9293

9394
ZEND_API int zend_signal(int signo, void (*handler)(int));
9495
ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);
9596

96-
#else /* ZEND_SIGNALS */
97+
#else /* HAVE_SIGACTION */
98+
99+
typedef struct _zend_signal_globals_t {
100+
zend_bool check; /* can be set in .INI file; won't do anything */
101+
} zend_signal_globals_t;
97102

98103
# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
99104
# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
@@ -102,10 +107,11 @@ ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigac
102107
# define zend_signal_deactivate()
103108
# define zend_signal_startup()
104109
# define zend_signal_init()
110+
# define zend_signal_disable_debug()
105111

106112
# define zend_signal(signo, handler) signal(signo, handler)
107113
# define zend_sigaction(signo, act, oldact) sigaction(signo, act, oldact)
108114

109-
#endif /* ZEND_SIGNALS */
115+
#endif /* HAVE_SIGACTION */
110116

111117
#endif /* ZEND_SIGNAL_H */

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,7 @@ scandir \
577577
setitimer \
578578
setenv \
579579
shutdown \
580+
sigaction \
580581
sigprocmask \
581582
statfs \
582583
statvfs \

ext/standard/info.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -848,12 +848,6 @@ PHPAPI ZEND_COLD void php_print_info(int flag)
848848
php_info_print_table_row(2, "Thread Safety", "disabled" );
849849
#endif
850850

851-
#ifdef ZEND_SIGNALS
852-
php_info_print_table_row(2, "Zend Signal Handling", "enabled" );
853-
#else
854-
php_info_print_table_row(2, "Zend Signal Handling", "disabled" );
855-
#endif
856-
857851
php_info_print_table_row(2, "Zend Memory Manager", is_zend_mm() ? "enabled" : "disabled" );
858852

859853
{

ext/standard/tests/general_functions/phpinfo.phpt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ Zend Extension Build => API%s
3131
PHP Extension Build => API%s
3232
Debug Build => %s
3333
Thread Safety => %s%A
34-
Zend Signal Handling => %s
3534
Zend Memory Manager => %s
3635
Zend Multibyte Support => %s
3736
IPv6 Support => %s

main/main.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,10 +1751,7 @@ int php_request_startup(void)
17511751

17521752
zend_activate();
17531753
sapi_activate();
1754-
1755-
#ifdef ZEND_SIGNALS
17561754
zend_signal_activate();
1757-
#endif
17581755

17591756
if (PG(max_input_time) == -1) {
17601757
zend_set_timeout(EG(timeout_seconds), 1);
@@ -1903,9 +1900,7 @@ void php_request_shutdown(void *dummy)
19031900
} zend_end_try();
19041901

19051902
/* 16. Deactivate Zend signals */
1906-
#ifdef ZEND_SIGNALS
19071903
zend_signal_deactivate();
1908-
#endif
19091904

19101905
#ifdef PHP_WIN32
19111906
if (PG(com_initialized)) {
@@ -2729,9 +2724,7 @@ PHPAPI void php_reserve_tsrm_memory(void)
27292724
TSRM_ALIGNED_SIZE(sizeof(zend_php_scanner_globals)) +
27302725
TSRM_ALIGNED_SIZE(sizeof(zend_ini_scanner_globals)) +
27312726
TSRM_ALIGNED_SIZE(sizeof(virtual_cwd_globals)) +
2732-
#ifdef ZEND_SIGNALS
27332727
TSRM_ALIGNED_SIZE(sizeof(zend_signal_globals_t)) +
2734-
#endif
27352728
TSRM_ALIGNED_SIZE(zend_mm_globals_size()) +
27362729
TSRM_ALIGNED_SIZE(zend_gc_globals_size()) +
27372730
TSRM_ALIGNED_SIZE(sizeof(php_core_globals)) +

sapi/apache2handler/sapi_apache2.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -739,20 +739,16 @@ static void php_apache_child_init(apr_pool_t *pchild, server_rec *s)
739739
apr_pool_cleanup_register(pchild, NULL, php_apache_child_shutdown, apr_pool_cleanup_null);
740740
}
741741

742-
#ifdef ZEND_SIGNALS
743742
static void php_apache_signal_init(apr_pool_t *pchild, server_rec *s)
744743
{
745744
zend_signal_init();
746745
}
747-
#endif
748746

749747
void php_ap2_register_hook(apr_pool_t *p)
750748
{
751749
ap_hook_pre_config(php_pre_config, NULL, NULL, APR_HOOK_MIDDLE);
752750
ap_hook_post_config(php_apache_server_startup, NULL, NULL, APR_HOOK_MIDDLE);
753751
ap_hook_handler(php_handler, NULL, NULL, APR_HOOK_MIDDLE);
754-
#ifdef ZEND_SIGNALS
755752
ap_hook_child_init(php_apache_signal_init, NULL, NULL, APR_HOOK_MIDDLE);
756-
#endif
757753
ap_hook_child_init(php_apache_child_init, NULL, NULL, APR_HOOK_MIDDLE);
758754
}

sapi/fuzzer/fuzzer-sapi.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,9 @@ int fuzzer_request_startup()
147147
return FAILURE;
148148
}
149149

150-
#ifdef ZEND_SIGNALS
151150
/* Some signal handlers will be overridden,
152151
* don't complain about them during shutdown. */
153-
SIGG(check) = 0;
154-
#endif
152+
zend_signal_disable_debug();
155153

156154
return SUCCESS;
157155
}

sapi/litespeed/lsapi_main.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,11 +1483,7 @@ int main( int argc, char * argv[] )
14831483
php_tsrm_startup();
14841484
#endif
14851485

1486-
#if PHP_MAJOR_VERSION >= 7
1487-
#if defined(ZEND_SIGNALS) || PHP_MINOR_VERSION > 0
14881486
zend_signal_startup();
1489-
#endif
1490-
#endif
14911487

14921488
if (argc > 1 ) {
14931489
if ( parse_opt( argc, argv, &climode,

sapi/phpdbg/phpdbg.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#include "zend_ini_scanner.h"
4545
#include "zend_stream.h"
4646
#include "zend_signal.h"
47-
#if !defined(_WIN32) && !defined(ZEND_SIGNALS)
47+
#if !defined(_WIN32)
4848
# include <signal.h>
4949
#elif defined(PHP_WIN32)
5050
# include "win32/signal.h"

0 commit comments

Comments
 (0)