Skip to content

Commit 6d4b22c

Browse files
committed
Override SAPI.ub_write and SAPI.flush for preloading
1 parent 386c9d3 commit 6d4b22c

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

ext/opcache/ZendAccelerator.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3798,6 +3798,16 @@ static int accel_preload(const char *config)
37983798
return ret;
37993799
}
38003800

3801+
size_t preload_ub_write(const char *str, size_t str_length)
3802+
{
3803+
return fwrite(str, 1, str_length, stdout);
3804+
}
3805+
3806+
void preload_flush(void *server_context)
3807+
{
3808+
fflush(stdout);
3809+
}
3810+
38013811
static int accel_finish_startup(void)
38023812
{
38033813
if (!ZCG(enabled) || !accel_startup_ok) {
@@ -3814,6 +3824,8 @@ static int accel_finish_startup(void)
38143824
int (*orig_send_headers)(sapi_headers_struct *sapi_headers TSRMLS_DC) = sapi_module.send_headers;
38153825
void (*orig_send_header)(sapi_header_struct *sapi_header, void *server_context TSRMLS_DC)= sapi_module.send_header;
38163826
char *(*orig_getenv)(char *name, size_t name_len TSRMLS_DC) = sapi_module.getenv;
3827+
size_t (*orig_ub_write)(const char *str, size_t str_length) = sapi_module.ub_write;
3828+
void (*orig_flush)(void *server_context) = sapi_module.flush;
38173829
#ifdef ZEND_SIGNALS
38183830
zend_bool old_reset_signals = SIGG(reset);
38193831
#endif
@@ -3841,6 +3853,8 @@ static int accel_finish_startup(void)
38413853
sapi_module.send_headers = NULL;
38423854
sapi_module.send_header = NULL;
38433855
sapi_module.getenv = NULL;
3856+
sapi_module.ub_write = preload_ub_write;
3857+
sapi_module.flush = preload_flush;
38443858

38453859
zend_interned_strings_switch_storage(1);
38463860

@@ -3884,6 +3898,8 @@ static int accel_finish_startup(void)
38843898
sapi_module.send_headers = orig_send_headers;
38853899
sapi_module.send_header = orig_send_header;
38863900
sapi_module.getenv = orig_getenv;
3901+
sapi_module.ub_write = orig_ub_write;
3902+
sapi_module.flush = orig_flush;
38873903

38883904
zend_shared_alloc_unlock();
38893905

0 commit comments

Comments
 (0)