Changeset 498 for trunk/xcache.c


Ignore:
Timestamp:
2008-01-04T15:05:12+01:00 (6 years ago)
Author:
moo
Message:

PHP_5_3: deep copy arg_info which is modified by executor

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/xcache.c

    r496 r498  
    14771477/* }}} */ 
    14781478 
     1479/* {{{ xc_gc_op_array_t */ 
     1480typedef struct { 
     1481    zend_uint num_args; 
     1482    zend_arg_info *arg_info; 
     1483} xc_gc_op_array_t; 
     1484/* }}} */ 
     1485void xc_gc_add_op_array(zend_op_array *op_array TSRMLS_DC) /* {{{ */ 
     1486{ 
     1487    xc_gc_op_array_t gc_op_array; 
     1488    gc_op_array.num_args = op_array->num_args; 
     1489    gc_op_array.arg_info = op_array->arg_info; 
     1490    zend_hash_next_index_insert(&XG(gc_op_arrays), (void *) &gc_op_array, sizeof(gc_op_array), NULL); 
     1491} 
     1492/* }}} */ 
     1493static void xc_gc_op_array(void *pDest) /* {{{ */ 
     1494{ 
     1495    xc_gc_op_array_t *op_array = (xc_gc_op_array_t *) pDest; 
     1496    zend_uint i; 
     1497    if (op_array->arg_info) { 
     1498        for (i = 0; i < op_array->num_args; i++) { 
     1499            efree((char*)op_array->arg_info[i].name); 
     1500            if (op_array->arg_info[i].class_name) { 
     1501                efree((char*)op_array->arg_info[i].class_name); 
     1502            } 
     1503        } 
     1504        efree(op_array->arg_info); 
     1505    } 
     1506} 
     1507/* }}} */ 
     1508 
    14791509/* module helper function */ 
    14801510static int xc_init_constant(int module_number TSRMLS_DC) /* {{{ */ 
     
    17111741    } 
    17121742 
     1743    zend_hash_init(&XG(gc_op_arrays), 32, NULL, xc_gc_op_array, 0); 
     1744 
    17131745#if PHP_API_VERSION <= 20041225 
    17141746    XG(request_time) = time(NULL); 
     
    17251757{ 
    17261758    xc_entry_unholds(TSRMLS_C); 
     1759    zend_hash_destroy(&XG(gc_op_arrays)); 
    17271760    xc_gc_expires_php(TSRMLS_C); 
    17281761    xc_gc_expires_var(TSRMLS_C); 
Note: See TracChangeset for help on using the changeset viewer.