|
|
|
@ -1637,6 +1637,7 @@ static void xc_compile_php(xc_compiler_t *compiler, zend_file_handle *h, int typ
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!XG(initial_compile_file_called)) {
|
|
|
|
|
TRACE("%s", "!initial_compile_file_called, give up");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -2438,9 +2439,6 @@ static int xc_init(int module_number TSRMLS_DC) /* {{{ */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (xc_php_size) {
|
|
|
|
|
old_compile_file = zend_compile_file;
|
|
|
|
|
zend_compile_file = xc_compile_file;
|
|
|
|
|
|
|
|
|
|
CHECK(xc_php_caches = xc_cache_init(xc_shm, &xc_php_hcache, &xc_php_hentry, &xc_php_hentry, xc_php_size), "failed init opcode cache");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -3524,8 +3522,16 @@ static void xcache_signal_handler(int sig) /* {{{ */
|
|
|
|
|
/* }}} */
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
static void xc_zend_startup_last() /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
if (xc_php_size) {
|
|
|
|
|
old_compile_file = zend_compile_file;
|
|
|
|
|
zend_compile_file = xc_compile_file;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* }}} */
|
|
|
|
|
static startup_func_t xc_last_ext_startup;
|
|
|
|
|
static int xc_zend_startup_last(zend_extension *extension) /* {{{ */
|
|
|
|
|
static int xc_zend_startup_last_hook(zend_extension *extension) /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
zend_extension *ext = zend_get_extension(XCACHE_NAME);
|
|
|
|
|
if (ext) {
|
|
|
|
@ -3540,15 +3546,15 @@ static int xc_zend_startup_last(zend_extension *extension) /* {{{ */
|
|
|
|
|
}
|
|
|
|
|
assert(xc_llist_zend_extension);
|
|
|
|
|
xcache_llist_prepend(&zend_extensions, xc_llist_zend_extension);
|
|
|
|
|
|
|
|
|
|
xc_zend_startup_last();
|
|
|
|
|
return SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
/* }}} */
|
|
|
|
|
static int xc_zend_startup(zend_extension *extension) /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
if (!origin_compile_file) {
|
|
|
|
|
origin_compile_file = zend_compile_file;
|
|
|
|
|
zend_compile_file = xc_check_initial_compile_file;
|
|
|
|
|
}
|
|
|
|
|
origin_compile_file = zend_compile_file;
|
|
|
|
|
zend_compile_file = xc_check_initial_compile_file;
|
|
|
|
|
|
|
|
|
|
if (zend_llist_count(&zend_extensions) > 1) {
|
|
|
|
|
zend_llist_position lpos;
|
|
|
|
@ -3558,13 +3564,18 @@ static int xc_zend_startup(zend_extension *extension) /* {{{ */
|
|
|
|
|
if (xc_llist_zend_extension != zend_extensions.head) {
|
|
|
|
|
zend_error(E_WARNING, "XCache failed to load itself as the first zend_extension. compatibility downgraded");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* hide myself */
|
|
|
|
|
/* TODO: hide handle sub modules */
|
|
|
|
|
xcache_llist_unlink(&zend_extensions, xc_llist_zend_extension);
|
|
|
|
|
|
|
|
|
|
ext = (zend_extension *) zend_llist_get_last_ex(&zend_extensions, &lpos);
|
|
|
|
|
assert(ext && ext != (zend_extension *) xc_llist_zend_extension->data);
|
|
|
|
|
xc_last_ext_startup = ext->startup;
|
|
|
|
|
ext->startup = xc_zend_startup_last;
|
|
|
|
|
ext->startup = xc_zend_startup_last_hook;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
xc_zend_startup_last();
|
|
|
|
|
}
|
|
|
|
|
return SUCCESS;
|
|
|
|
|
}
|
|
|
|
|