Skip to content

Remove Zend signal handling #5591

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 11 commits into from
Closed
17 changes: 1 addition & 16 deletions Zend/Zend.m4
Original file line number Diff line number Diff line change
Expand Up @@ -303,22 +303,7 @@ AC_MSG_RESULT(done)

AC_CHECK_FUNCS(mremap)

AC_ARG_ENABLE([zend-signals],
[AS_HELP_STRING([--disable-zend-signals],
[whether to enable zend signal handling])],
[ZEND_SIGNALS=$enableval],
[ZEND_SIGNALS=yes])

AC_CHECK_FUNCS([sigaction], [], [
ZEND_SIGNALS=no
])
if test "$ZEND_SIGNALS" = "yes"; then
AC_DEFINE(ZEND_SIGNALS, 1, [Use zend signal handling])
CFLAGS="$CFLAGS -DZEND_SIGNALS"
fi

AC_MSG_CHECKING(whether to enable zend signal handling)
AC_MSG_RESULT($ZEND_SIGNALS)
AC_CHECK_FUNCS(sigaction)

])

Expand Down
32 changes: 29 additions & 3 deletions Zend/zend.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,31 @@ static uint32_t zend_version_info_length;
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) Zend Technologies\n"
#define PRINT_ZVAL_INDENT 4

#ifdef HAVE_SIGPROCMASK
ZEND_API sigset_t mask_all_signals; /* For blocking/unblocking signals */

# if ZEND_DEBUG
/* Ensure that signal blocking macros in zend_signal.h are used correctly */
ZEND_TLS int _signals_masked = 0;
ZEND_API void zend_debug_mask_signals()
{
_signals_masked++;
}
ZEND_API void zend_debug_unmask_signals()
{
if (--_signals_masked) {
zend_error_noreturn(E_ERROR, "Cannot nest HANDLE_BLOCK_INTERRUPTIONS; it is not re-entrant");
}
}
ZEND_API void zend_debug_ensure_signals_masked()
{
if (!_signals_masked) {
zend_error_noreturn(E_ERROR, "Must block signals using HANDLE_BLOCK_INTERRUPTIONS");
}
}
# endif
#endif

/* true multithread-shared globals */
ZEND_API zend_class_entry *zend_standard_class_def = NULL;
ZEND_API size_t (*zend_printf)(const char *format, ...);
Expand Down Expand Up @@ -164,9 +189,6 @@ ZEND_INI_BEGIN()
STD_ZEND_INI_BOOLEAN("zend.multibyte", "0", ZEND_INI_PERDIR, OnUpdateBool, multibyte, zend_compiler_globals, compiler_globals)
ZEND_INI_ENTRY("zend.script_encoding", NULL, ZEND_INI_ALL, OnUpdateScriptEncoding)
STD_ZEND_INI_BOOLEAN("zend.detect_unicode", "1", ZEND_INI_ALL, OnUpdateBool, detect_unicode, zend_compiler_globals, compiler_globals)
#ifdef ZEND_SIGNALS
STD_ZEND_INI_BOOLEAN("zend.signal_check", "0", ZEND_INI_SYSTEM, OnUpdateBool, check, zend_signal_globals_t, zend_signal_globals)
#endif
STD_ZEND_INI_BOOLEAN("zend.exception_ignore_args", "0", ZEND_INI_ALL, OnUpdateBool, exception_ignore_args, zend_executor_globals, executor_globals)
ZEND_INI_END()

Expand Down Expand Up @@ -806,6 +828,10 @@ int zend_startup(zend_utility_functions *utility_functions) /* {{{ */
fpsetmask(0);
#endif

#ifdef HAVE_SIGPROCMASK
sigfillset(&mask_all_signals);
#endif

zend_startup_strtod();
zend_startup_extensions_mechanism();

Expand Down
4 changes: 2 additions & 2 deletions Zend/zend.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@

#define zend_sprintf sprintf

#define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
#define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
#define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
#define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()

#define INTERNAL_FUNCTION_PARAMETERS zend_execute_data *execute_data, zval *return_value
#define INTERNAL_FUNCTION_PARAM_PASSTHRU execute_data, return_value
Expand Down
1 change: 0 additions & 1 deletion Zend/zend_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,6 @@
#include "zend_operators.h"
#include "zend_multiply.h"
#include "zend_bitset.h"
#include <signal.h>

#ifdef HAVE_UNISTD_H
# include <unistd.h>
Expand Down
1 change: 0 additions & 1 deletion Zend/zend_execute.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
#define ZEND_INTENSIVE_DEBUGGING 0

#include <stdio.h>
#include <signal.h>

#include "zend.h"
#include "zend_compile.h"
Expand Down
5 changes: 0 additions & 5 deletions Zend/zend_execute_API.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
*/

#include <stdio.h>
#include <signal.h>

#include "zend.h"
#include "zend_compile.h"
Expand Down Expand Up @@ -1258,9 +1257,6 @@ static void zend_set_timeout_ex(zend_long seconds, int reset_signals) /* {{{ */
# endif

if (reset_signals) {
# ifdef ZEND_SIGNALS
zend_signal(signo, zend_timeout_handler);
# else
sigset_t sigset;
# ifdef HAVE_SIGACTION
struct sigaction act;
Expand All @@ -1275,7 +1271,6 @@ static void zend_set_timeout_ex(zend_long seconds, int reset_signals) /* {{{ */
sigemptyset(&sigset);
sigaddset(&sigset, signo);
sigprocmask(SIG_UNBLOCK, &sigset, NULL);
# endif /* ZEND_SIGNALS */
}
}
#endif /* HAVE_SETITIMER */
Expand Down
Loading