Skip to content

Commit f76a955

Browse files
committed
Fixed incorrect signal handlers overriding
1 parent 0810ce0 commit f76a955

File tree

3 files changed

+9
-2
lines changed

3 files changed

+9
-2
lines changed

Zend/zend_signal.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,8 +322,10 @@ void zend_signal_activate(void)
322322

323323
memcpy(&SIGG(handlers), &global_orig_handlers, sizeof(global_orig_handlers));
324324

325-
for (x = 0; x < sizeof(zend_sigs) / sizeof(*zend_sigs); x++) {
326-
zend_signal_register(zend_sigs[x], zend_signal_handler_defer);
325+
if (SIGG(reset)) {
326+
for (x = 0; x < sizeof(zend_sigs) / sizeof(*zend_sigs); x++) {
327+
zend_signal_register(zend_sigs[x], zend_signal_handler_defer);
328+
}
327329
}
328330

329331
SIGG(active) = 1;
@@ -365,6 +367,7 @@ static void zend_signal_globals_ctor(zend_signal_globals_t *zend_signal_globals)
365367
size_t x;
366368

367369
memset(zend_signal_globals, 0, sizeof(*zend_signal_globals));
370+
zend_signal_globals->reset = 1;
368371

369372
for (x = 0; x < sizeof(zend_signal_globals->pstorage) / sizeof(*zend_signal_globals->pstorage); ++x) {
370373
zend_signal_queue_t *queue = &zend_signal_globals->pstorage[x];

Zend/zend_signal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ typedef struct _zend_signal_globals_t {
5959
int running; /* in signal handler execution */
6060
int active; /* internal signal handling is enabled */
6161
zend_bool check; /* check for replaced handlers on shutdown */
62+
zend_bool reset; /* reset signal handlers on each request */
6263
zend_signal_entry_t handlers[NSIG];
6364
zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail; /* pending queue */
6465
} zend_signal_globals_t;

ext/opcache/ZendAccelerator.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3738,6 +3738,7 @@ static int accel_finish_startup(void)
37383738
int (*orig_send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC) = sapi_module.send_headers;
37393739
void (*orig_send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)= sapi_module.send_header;
37403740
char *(*orig_getenv)(char *name, size_t name_len TSRMLS_DC) = sapi_module.getenv;
3741+
zend_bool old_reset_signals = SIGG(reset);
37413742

37423743
sapi_module.activate = NULL;
37433744
sapi_module.deactivate = NULL;
@@ -3752,6 +3753,7 @@ static int accel_finish_startup(void)
37523753
zend_interned_strings_set_permanent_storage_copy_handlers(NULL, accel_use_permanent_interned_strings);
37533754
}
37543755

3756+
SIGG(reset) = 0;
37553757
if (php_request_startup() == SUCCESS) {
37563758

37573759
/* don't send headers */
@@ -3778,6 +3780,7 @@ static int accel_finish_startup(void)
37783780
} else {
37793781
ret = FAILURE;
37803782
}
3783+
SIGG(reset) = old_reset_signals;
37813784

37823785
sapi_module.activate = orig_activate;
37833786
sapi_module.deactivate = orig_deactivate;

0 commit comments

Comments
 (0)