Cleanup zend_signal API

This commit is contained in:
Dmitry Stogov 2016-06-20 14:58:42 +03:00
parent 3abd9c34c1
commit c8706331b5
13 changed files with 58 additions and 63 deletions

View file

@ -40,10 +40,7 @@
#include "zend_iterators.h" #include "zend_iterators.h"
#include "zend_stream.h" #include "zend_stream.h"
#include "zend_smart_str_public.h" #include "zend_smart_str_public.h"
#ifdef ZEND_SIGNALS
#include "zend_signal.h" #include "zend_signal.h"
#endif
#ifndef ZEND_SIGNALS #ifndef ZEND_SIGNALS
/* block/unblock interruptions callbacks might be used by SAPI, and were used /* block/unblock interruptions callbacks might be used by SAPI, and were used
@ -52,7 +49,7 @@
# define HANDLE_BLOCK_INTERRUPTIONS() # define HANDLE_BLOCK_INTERRUPTIONS()
# define HANDLE_UNBLOCK_INTERRUPTIONS() # define HANDLE_UNBLOCK_INTERRUPTIONS()
#else #else
# define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() # define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
# define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() # define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
#endif #endif

View file

@ -48,7 +48,19 @@
#ifdef ZTS #ifdef ZTS
ZEND_API int zend_signal_globals_id; ZEND_API int zend_signal_globals_id;
#else #else
zend_signal_globals_t zend_signal_globals; ZEND_API zend_signal_globals_t zend_signal_globals;
#endif /* not ZTS */
#define SIGNAL_BEGIN_CRITICAL() \
sigset_t oldmask; \
zend_sigprocmask(SIG_BLOCK, &global_sigmask, &oldmask);
#define SIGNAL_END_CRITICAL() \
zend_sigprocmask(SIG_SETMASK, &oldmask, NULL);
#ifdef ZTS
# define zend_sigprocmask(signo, set, oldset) tsrm_sigmask((signo), (set), (oldset))
#else
# define zend_sigprocmask(signo, set, oldset) sigprocmask((signo), (set), (oldset))
#endif #endif
static void zend_signal_handler(int signo, siginfo_t *siginfo, void *context); static void zend_signal_handler(int signo, siginfo_t *siginfo, void *context);
@ -338,7 +350,7 @@ static void zend_signal_globals_ctor(zend_signal_globals_t *zend_signal_globals)
} }
/* }}} */ /* }}} */
void zend_signal_init() /* {{{ */ void zend_signal_init(void) /* {{{ */
{ {
int signo; int signo;
struct sigaction sa = {{0}}; struct sigaction sa = {{0}};
@ -360,7 +372,7 @@ void zend_signal_init() /* {{{ */
/* {{{ zend_signal_startup /* {{{ zend_signal_startup
* alloc zend signal globals */ * alloc zend signal globals */
void zend_signal_startup() void zend_signal_startup(void)
{ {
#ifdef ZTS #ifdef ZTS

View file

@ -23,6 +23,8 @@
#ifndef ZEND_SIGNAL_H #ifndef ZEND_SIGNAL_H
#define ZEND_SIGNAL_H #define ZEND_SIGNAL_H
#ifdef ZEND_SIGNALS
# ifdef HAVE_SIGNAL_H # ifdef HAVE_SIGNAL_H
# include <signal.h> # include <signal.h>
# endif # endif
@ -68,34 +70,46 @@ typedef struct _zend_signal_globals_t {
BEGIN_EXTERN_C() BEGIN_EXTERN_C()
ZEND_API extern int zend_signal_globals_id; ZEND_API extern int zend_signal_globals_id;
END_EXTERN_C() END_EXTERN_C()
# define ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; } # else
# define SIGG(v) (zend_signal_globals.v)
BEGIN_EXTERN_C()
ZEND_API extern zend_signal_globals_t zend_signal_globals;
END_EXTERN_C()
# endif /* not ZTS */
# ifdef ZTS
# define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; }
# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); } # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); }
# else /* ZTS */ # else /* ZTS */
# define SIGG(v) (zend_signal_globals.v) # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() SIGG(depth)++;
extern ZEND_API zend_signal_globals_t zend_signal_globals;
# define ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() SIGG(depth)++;
# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); } # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); }
# endif /* not ZTS */ # endif /* not ZTS */
# define SIGNAL_BEGIN_CRITICAL() sigset_t oldmask; \ ZEND_API void zend_signal_handler_unblock(void);
zend_sigprocmask(SIG_BLOCK, &global_sigmask, &oldmask);
# define SIGNAL_END_CRITICAL() zend_sigprocmask(SIG_SETMASK, &oldmask, NULL);
void zend_signal_handler_defer(int signo, siginfo_t *siginfo, void *context);
ZEND_API void zend_signal_handler_unblock();
void zend_signal_activate(void); void zend_signal_activate(void);
void zend_signal_deactivate(void); void zend_signal_deactivate(void);
void zend_signal_startup(); void zend_signal_startup(void);
void zend_signal_init(); void zend_signal_init(void);
void zend_signal_shutdown(void); void zend_signal_shutdown(void);
ZEND_API int zend_signal(int signo, void (*handler)(int)); ZEND_API int zend_signal(int signo, void (*handler)(int));
ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact); ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact);
#ifdef ZTS #else /* ZEND_SIGNALS */
#define zend_sigprocmask(signo, set, oldset) tsrm_sigmask((signo), (set), (oldset))
#else # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS()
#define zend_sigprocmask(signo, set, oldset) sigprocmask((signo), (set), (oldset)) # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS()
#endif
# define zend_signal_activate()
# define zend_signal_deactivate()
# define zend_signal_startup()
# define zend_signal_init()
# define zend_signal_shutdown()
# define zend_signal(signo, handler) signal(signo, handler)
# define zend_sigaction(signo, act, oldact) sigaction(signo, act, oldact)
#endif /* ZEND_SIGNALS */
#endif /* ZEND_SIGNAL_H */ #endif /* ZEND_SIGNAL_H */

View file

@ -28,8 +28,7 @@
Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all) Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all)
{ {
struct sigaction act,oact; struct sigaction act,oact;
#ifdef ZEND_SIGNALS
#endif
act.sa_handler = func; act.sa_handler = func;
if (mask_all) { if (mask_all) {
sigfillset(&act.sa_mask); sigfillset(&act.sa_mask);
@ -46,12 +45,7 @@ Sigfunc *php_signal4(int signo, Sigfunc *func, int restart, int mask_all)
act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */ act.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
#endif #endif
} }
#ifdef ZEND_SIGNALS if (zend_sigaction(signo, &act, &oact) < 0) {
if (zend_sigaction(signo, &act, &oact) < 0)
#else
if (sigaction(signo, &act, &oact) < 0)
#endif
{
return SIG_ERR; return SIG_ERR;
} }

View file

@ -1597,9 +1597,7 @@ int php_request_startup(void)
zend_activate(); zend_activate();
sapi_activate(); sapi_activate();
#ifdef ZEND_SIGNALS
zend_signal_activate(); zend_signal_activate();
#endif
if (PG(max_input_time) == -1) { if (PG(max_input_time) == -1) {
zend_set_timeout(EG(timeout_seconds), 1); zend_set_timeout(EG(timeout_seconds), 1);

View file

@ -456,9 +456,7 @@ php_apache_server_startup(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *ptemp
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
sapi_startup(&apache2_sapi_module); sapi_startup(&apache2_sapi_module);
apache2_sapi_module.startup(&apache2_sapi_module); apache2_sapi_module.startup(&apache2_sapi_module);

View file

@ -1800,9 +1800,7 @@ int main(int argc, char *argv[])
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
#ifdef ZTS #ifdef ZTS
ts_allocate_id(&php_cgi_globals_id, sizeof(php_cgi_globals_struct), (ts_allocate_ctor) php_cgi_globals_ctor, NULL); ts_allocate_id(&php_cgi_globals_id, sizeof(php_cgi_globals_struct), (ts_allocate_ctor) php_cgi_globals_ctor, NULL);

View file

@ -1230,9 +1230,7 @@ int main(int argc, char *argv[])
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
#ifdef PHP_WIN32 #ifdef PHP_WIN32
_fmode = _O_BINARY; /*sets default for file streams to binary */ _fmode = _O_BINARY; /*sets default for file streams to binary */

View file

@ -177,9 +177,7 @@ EMBED_SAPI_API int php_embed_init(int argc, char **argv)
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
sapi_startup(&php_embed_module); sapi_startup(&php_embed_module);

View file

@ -1612,9 +1612,7 @@ int main(int argc, char *argv[])
tsrm_ls = ts_resource(0); tsrm_ls = ts_resource(0);
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
sapi_startup(&cgi_sapi_module); sapi_startup(&cgi_sapi_module);
cgi_sapi_module.php_ini_path_override = NULL; cgi_sapi_module.php_ini_path_override = NULL;

View file

@ -242,9 +242,7 @@ int fpm_signals_init_child() /* {{{ */
return -1; return -1;
} }
#ifdef ZEND_SIGNALS
zend_signal_init(); zend_signal_init();
#endif
return 0; return 0;
} }
/* }}} */ /* }}} */

View file

@ -1007,9 +1007,7 @@ int main( int argc, char * argv[] )
tsrm_startup(1, 1, 0, NULL); tsrm_startup(1, 1, 0, NULL);
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
if (argc > 1 ) { if (argc > 1 ) {
if ( parse_opt( argc, argv, &climode, if ( parse_opt( argc, argv, &climode,

View file

@ -1241,11 +1241,7 @@ void phpdbg_signal_handler(int sig, siginfo_t *info, void *context) /* {{{ */
} }
is_handled = phpdbg_watchpoint_segfault_handler(info, context); is_handled = phpdbg_watchpoint_segfault_handler(info, context);
if (is_handled == FAILURE) { if (is_handled == FAILURE) {
#ifdef ZEND_SIGNALS
zend_sigaction(sig, &PHPDBG_G(old_sigsegv_signal), NULL); zend_sigaction(sig, &PHPDBG_G(old_sigsegv_signal), NULL);
#else
sigaction(sig, &PHPDBG_G(old_sigsegv_signal), NULL);
#endif
} }
break; break;
} }
@ -1342,9 +1338,7 @@ int main(int argc, char **argv) /* {{{ */
ZEND_TSRMLS_CACHE_UPDATE(); ZEND_TSRMLS_CACHE_UPDATE();
#endif #endif
#ifdef ZEND_SIGNALS
zend_signal_startup(); zend_signal_startup();
#endif
phpdbg_main: phpdbg_main:
ini_entries = NULL; ini_entries = NULL;