|
|
|
@ -1476,6 +1476,36 @@ int xc_is_shm(const void *p) /* {{{ */
|
|
|
|
|
}
|
|
|
|
|
/* }}} */
|
|
|
|
|
|
|
|
|
|
/* {{{ xc_gc_op_array_t */
|
|
|
|
|
typedef struct {
|
|
|
|
|
zend_uint num_args;
|
|
|
|
|
zend_arg_info *arg_info;
|
|
|
|
|
} xc_gc_op_array_t;
|
|
|
|
|
/* }}} */
|
|
|
|
|
void xc_gc_add_op_array(zend_op_array *op_array TSRMLS_DC) /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
xc_gc_op_array_t gc_op_array;
|
|
|
|
|
gc_op_array.num_args = op_array->num_args;
|
|
|
|
|
gc_op_array.arg_info = op_array->arg_info;
|
|
|
|
|
zend_hash_next_index_insert(&XG(gc_op_arrays), (void *) &gc_op_array, sizeof(gc_op_array), NULL);
|
|
|
|
|
}
|
|
|
|
|
/* }}} */
|
|
|
|
|
static void xc_gc_op_array(void *pDest) /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
xc_gc_op_array_t *op_array = (xc_gc_op_array_t *) pDest;
|
|
|
|
|
zend_uint i;
|
|
|
|
|
if (op_array->arg_info) {
|
|
|
|
|
for (i = 0; i < op_array->num_args; i++) {
|
|
|
|
|
efree((char*)op_array->arg_info[i].name);
|
|
|
|
|
if (op_array->arg_info[i].class_name) {
|
|
|
|
|
efree((char*)op_array->arg_info[i].class_name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
efree(op_array->arg_info);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/* }}} */
|
|
|
|
|
|
|
|
|
|
/* module helper function */
|
|
|
|
|
static int xc_init_constant(int module_number TSRMLS_DC) /* {{{ */
|
|
|
|
|
{
|
|
|
|
@ -1710,6 +1740,8 @@ static void xc_request_init(TSRMLS_D) /* {{{ */
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
zend_hash_init(&XG(gc_op_arrays), 32, NULL, xc_gc_op_array, 0);
|
|
|
|
|
|
|
|
|
|
#if PHP_API_VERSION <= 20041225
|
|
|
|
|
XG(request_time) = time(NULL);
|
|
|
|
|
#else
|
|
|
|
@ -1724,6 +1756,7 @@ static void xc_request_init(TSRMLS_D) /* {{{ */
|
|
|
|
|
static void xc_request_shutdown(TSRMLS_D) /* {{{ */
|
|
|
|
|
{
|
|
|
|
|
xc_entry_unholds(TSRMLS_C);
|
|
|
|
|
zend_hash_destroy(&XG(gc_op_arrays));
|
|
|
|
|
xc_gc_expires_php(TSRMLS_C);
|
|
|
|
|
xc_gc_expires_var(TSRMLS_C);
|
|
|
|
|
xc_gc_deletes(TSRMLS_C);
|
|
|
|
|