Skip to content

Commit 1fc5f3d

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 1fc5f3d

File tree

13 files changed

+20
-67
lines changed

13 files changed

+20
-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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +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
168+
#ifdef HAVE_SIGACTION
169169
STD_ZEND_INI_BOOLEAN("zend.signal_check", "0", ZEND_INI_SYSTEM, OnUpdateBool, check, zend_signal_globals_t, zend_signal_globals)
170170
#endif
171171
STD_ZEND_INI_BOOLEAN("zend.exception_ignore_args", "0", ZEND_INI_ALL, OnUpdateBool, exception_ignore_args, zend_executor_globals, executor_globals)

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

@@ -61,6 +61,8 @@ typedef struct _zend_signal_globals_t {
6161
zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail; /* pending queue */
6262
} zend_signal_globals_t;
6363

64+
# define SIZEOF_ZEND_SIGNAL_GLOBALS sizeof(zend_signal_globals_t)
65+
6466
# ifdef ZTS
6567
# define SIGG(v) ZEND_TSRMG_FAST(zend_signal_globals_offset, zend_signal_globals_t *, v)
6668
BEGIN_EXTERN_C()
@@ -89,11 +91,14 @@ BEGIN_EXTERN_C()
8991
ZEND_API void zend_signal_startup(void);
9092
END_EXTERN_C()
9193
void zend_signal_init(void);
94+
ZEND_API void zend_signal_disable_debug(void);
9295

9396
ZEND_API int zend_signal(int signo, void (*handler)(int));
9497
ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);
9598

96-
#else /* ZEND_SIGNALS */
99+
#else /* HAVE_SIGACTION */
100+
101+
# define SIZEOF_ZEND_SIGNAL_GLOBALS 0
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: 1 addition & 8 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
2733-
TSRM_ALIGNED_SIZE(sizeof(zend_signal_globals_t)) +
2734-
#endif
2727+
TSRM_ALIGNED_SIZE(SIZEOF_ZEND_SIGNAL_GLOBALS) +
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)