Changeset 268


Ignore:
Timestamp:
2006-10-29T03:05:01+01:00 (7 years ago)
Author:
moo
Message:

full compatible with auto_globals_jit, no need to disable it from now on

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/processor/processor.m4

    r267 r268  
    708708') 
    709709dnl }}} 
     710#ifdef ZEND_ENGINE_2_1 
     711DEF_STRUCT_P_FUNC(`xc_autoglobal_t', , `dnl {{{ 
     712    DISPATCH(zend_uint, key_len) 
     713#ifdef IS_UNICODE 
     714    DISPATCH(zend_uchar, type) 
     715#endif 
     716    IFRESTORE(`COPY(key)', ` 
     717        PROC_ZSTRING_L(type, key, key_len) 
     718    ') 
     719') 
     720dnl }}} 
     721#endif 
    710722DEF_STRUCT_P_FUNC(`xc_entry_data_php_t', , `dnl {{{ 
    711723    zend_uint i; 
     
    736748    ') 
    737749    STRUCT_ARRAY(classinfo_cnt, xc_classinfo_t, classinfos) 
     750#ifdef ZEND_ENGINE_2_1 
     751    DISPATCH(zend_uint, autoglobal_cnt) 
     752    STRUCT_ARRAY(autoglobal_cnt, xc_autoglobal_t, autoglobals) 
     753#endif 
    738754    DISPATCH(zend_bool, have_early_binding) 
    739755    popdef(`BEFORE_LOOP') 
  • trunk/utils.c

    r264 r268  
    511511#define OG(x) (sandbox->orig_##x) 
    512512/* }}} */ 
     513#ifdef ZEND_ENGINE_2_1 
     514static zend_bool xc_auto_global_callback(char *name, uint name_len TSRMLS_DC) /* {{{ */ 
     515{ 
     516    zend_auto_global *auto_global; 
     517    if (zend_u_hash_find(CG(auto_globals), UG(unicode) ? IS_UNICODE : IS_STRING, ZSTR(name), name_len + 1, (void **) &auto_global) == FAILURE) { 
     518        return 1; 
     519    } 
     520    return 0; 
     521} 
     522/* }}} */ 
     523static int xc_auto_global_arm(zend_auto_global *auto_global TSRMLS_DC) /* {{{ */ 
     524{ 
     525    if (auto_global->auto_global_callback) { 
     526        auto_global->armed = 1; 
     527        auto_global->auto_global_callback = xc_auto_global_callback; 
     528    } 
     529    else { 
     530        auto_global->armed = 0; 
     531    } 
     532    return ZEND_HASH_APPLY_KEEP; 
     533} 
     534/* }}} */ 
     535#endif 
    513536xc_sandbox_t *xc_sandbox_init(xc_sandbox_t *sandbox, char *filename TSRMLS_DC) /* {{{ */ 
    514537{ 
     
    535558    EG(class_table) = CG(class_table); 
    536559 
     560#ifdef ZEND_ENGINE_2_1 
     561    OG(auto_globals) = CG(auto_globals); 
     562    CG(auto_globals) = &TG(auto_globals); 
     563#endif 
     564 
    537565    TG(included_files) = &EG(included_files); 
    538566 
     
    543571    zend_hash_init_ex(&TG(function_table), 128, NULL, OG(function_table)->pDestructor, 0, 0); 
    544572    zend_hash_init_ex(&TG(class_table), 16, NULL, OG(class_table)->pDestructor, 0, 0); 
     573#ifdef ZEND_ENGINE_2_1 
     574    zend_hash_init_ex(&TG(auto_globals), 8, NULL, OG(auto_globals)->pDestructor, 0, 0); 
     575    { 
     576        zend_auto_global tmp_autoglobal; 
     577 
     578        zend_hash_copy(&TG(auto_globals), OG(auto_globals), NULL, (void *) &tmp_autoglobal, sizeof(tmp_autoglobal)); 
     579        zend_hash_apply(&TG(auto_globals), (apply_func_t) xc_auto_global_arm TSRMLS_CC); 
     580    } 
     581#endif 
    545582 
    546583    sandbox->filename = filename; 
     
    592629        b = b->pListNext; 
    593630    } 
     631 
     632#ifdef ZEND_ENGINE_2_1 
     633    /* trigger auto_globals jit */ 
     634    for (b = TG(auto_globals).pListHead; b != NULL; b = b->pListNext) { 
     635        zend_auto_global *auto_global = (zend_auto_global *) b->pData; 
     636        /* check if actived */ 
     637        if (auto_global->auto_global_callback && !auto_global->armed) { 
     638            zend_u_is_auto_global(BUCKET_KEY_TYPE(b), ZSTR(BUCKET_KEY_S(b)), auto_global->name_len TSRMLS_CC); 
     639        } 
     640    } 
     641#endif 
     642 
    594643    xc_undo_pass_two(CG(active_op_array) TSRMLS_CC); 
    595644    xc_foreach_early_binding_class(CG(active_op_array), xc_early_binding_cb, (void *) sandbox TSRMLS_CC); 
     
    609658    CG(class_table)    = OG(class_table); 
    610659    EG(class_table)    = CG(class_table); 
     660#ifdef ZEND_ENGINE_2_1 
     661    CG(auto_globals)   = OG(auto_globals); 
     662#endif 
    611663 
    612664    if (install) { 
     
    624676        TG(function_table).pDestructor = NULL; 
    625677        TG(class_table).pDestructor = NULL; 
     678#ifdef ZEND_ENGINE_2_1 
     679        TG(auto_globals).pDestructor = NULL; 
     680#endif 
    626681    } 
    627682 
     
    632687    zend_hash_destroy(&TG(function_table)); 
    633688    zend_hash_destroy(&TG(class_table)); 
     689#ifdef ZEND_ENGINE_2_1 
     690    zend_hash_destroy(&TG(auto_globals)); 
     691#endif 
    634692    zend_hash_destroy(TG(included_files)); 
    635693 
  • trunk/utils.h

    r212 r268  
    4949    HashTable *orig_function_table; 
    5050    HashTable *orig_class_table; 
     51    HashTable *orig_auto_globals; 
    5152    HashTable tmp_function_table; 
    5253    HashTable tmp_class_table; 
     54    HashTable tmp_auto_globals; 
    5355} xc_sandbox_t; 
    5456 
  • trunk/xcache-zh-gb2312.ini

    r204 r268  
    99;; »òÕß Win32 ϵͳ: 
    1010; extension = php_xcache.dll 
    11  
    12 ; Èç¹ûÄúÔÚ php5.1 »òÕßÒÔÉÏ°æ±¾ÆôÓà XCache, Ôò±ØÐëʹÓÃÒÔÏÂÉèÖà
    13 auto_globals_jit = Off 
    1411 
    1512[xcache.admin] 
  • trunk/xcache.c

    r254 r268  
    500500            add_assoc_long_ex(ei, ZEND_STRS("function_cnt"),  php->funcinfo_cnt); 
    501501            add_assoc_long_ex(ei, ZEND_STRS("class_cnt"),     php->classinfo_cnt); 
     502#ifdef ZEND_ENGINE_2_1 
     503            add_assoc_long_ex(ei, ZEND_STRS("autoglobal_cnt"),php->autoglobal_cnt); 
     504#endif 
    502505            break; 
    503506        case XC_TYPE_VAR: 
     
    580583                UNISW(0, ci->type), ci->key, ci->key_size TSRMLS_CC); 
    581584    } 
     585 
     586#ifdef ZEND_ENGINE_2_1 
     587    /* trigger auto_globals jit */ 
     588    for (i = 0; i < p->autoglobal_cnt; i ++) { 
     589        xc_autoglobal_t *aginfo = &p->autoglobals[i]; 
     590        /* 
     591        zend_auto_global *auto_global; 
     592        if (zend_u_hash_find(CG(auto_globals), aginfo->type, aginfo->key, aginfo->key_len+1, (void **) &auto_global)==SUCCESS) { 
     593            if (auto_global->armed) { 
     594                auto_global->armed = auto_global->auto_global_callback(auto_global->name, auto_global->name_len TSRMLS_CC); 
     595            } 
     596        } 
     597        */ 
     598        zend_u_is_auto_global(aginfo->type, aginfo->key, aginfo->key_len TSRMLS_CC); 
     599    } 
     600#endif 
    582601 
    583602    i = 1; 
     
    949968 
    950969#ifdef HAVE_XCACHE_CONSTANT 
    951     php.constinfo_cnt = zend_hash_num_elements(EG(zend_constants)) - old_constinfo_cnt; 
    952 #endif 
    953     php.funcinfo_cnt  = zend_hash_num_elements(CG(function_table)) - old_funcinfo_cnt; 
    954     php.classinfo_cnt = zend_hash_num_elements(CG(class_table))    - old_classinfo_cnt; 
     970    php.constinfo_cnt  = zend_hash_num_elements(EG(zend_constants)) - old_constinfo_cnt; 
     971#endif 
     972    php.funcinfo_cnt   = zend_hash_num_elements(CG(function_table)) - old_funcinfo_cnt; 
     973    php.classinfo_cnt  = zend_hash_num_elements(CG(class_table))    - old_classinfo_cnt; 
     974#ifdef ZEND_ENGINE_2_1 
     975    /* {{{ count php.autoglobal_cnt */ { 
     976        Bucket *b; 
     977 
     978        php.autoglobal_cnt = 0; 
     979        for (b = CG(auto_globals)->pListHead; b != NULL; b = b->pListNext) { 
     980            zend_auto_global *auto_global = (zend_auto_global *) b->pData; 
     981            /* check if actived */ 
     982            if (auto_global->auto_global_callback && !auto_global->armed) { 
     983                php.autoglobal_cnt ++; 
     984            } 
     985        } 
     986    } 
     987    /* }}} */ 
     988#endif 
    955989 
    956990#define X_ALLOC_N(var, cnt) do {     \ 
     
    9671001 
    9681002#ifdef HAVE_XCACHE_CONSTANT 
    969     X_ALLOC_N(constinfos, constinfo_cnt); 
    970 #endif 
    971     X_ALLOC_N(funcinfos,  funcinfo_cnt); 
    972     X_ALLOC_N(classinfos, classinfo_cnt); 
     1003    X_ALLOC_N(constinfos,  constinfo_cnt); 
     1004#endif 
     1005    X_ALLOC_N(funcinfos,   funcinfo_cnt); 
     1006    X_ALLOC_N(classinfos,  classinfo_cnt); 
     1007#ifdef ZEND_ENGINE_2_1 
     1008    X_ALLOC_N(autoglobals, autoglobal_cnt); 
     1009#endif 
    9731010#undef X_ALLOC 
    9741011    /* }}} */ 
     
    10061043 
    10071044#undef COPY_H 
    1008         /* for ZE1, cest need to fix inside store */ 
     1045 
     1046        /* for ZE1, cest need to be fixed inside store */ 
     1047 
     1048#ifdef ZEND_ENGINE_2_1 
     1049        /* scan for acatived auto globals */ 
     1050        i = 0; 
     1051        for (b = CG(auto_globals)->pListHead; b != NULL; b = b->pListNext) { 
     1052            zend_auto_global *auto_global = (zend_auto_global *) b->pData; 
     1053            /* check if actived */ 
     1054            if (auto_global->auto_global_callback && !auto_global->armed) { 
     1055                xc_autoglobal_t *data = &php.autoglobals[i ++]; 
     1056 
     1057                assert(i < php.autoglobal_cnt); 
     1058                UNISW(NOTHING, data->type = b->key.type;) 
     1059                if (UNISW(1, b->key.type == IS_STRING)) { 
     1060                    ZSTR_S(data->key)     = BUCKET_KEY_S(b); 
     1061                } 
     1062                else { 
     1063                    ZSTR_U(data->key)     = BUCKET_KEY_U(b); 
     1064                } 
     1065                data->key_len = b->nKeyLength - 1; 
     1066            } 
     1067        } 
     1068#endif 
    10091069    } 
    10101070    /* }}} */ 
     
    10361096err_##var: 
    10371097 
     1098#ifdef ZEND_ENGINE_2_1 
     1099    X_FREE(autoglobals) 
     1100#endif 
    10381101    X_FREE(classinfos) 
    10391102    X_FREE(funcinfos) 
     
    11001163        efree(xce.data.php->var); \ 
    11011164    } 
     1165#ifdef ZEND_ENGINE_2_1 
     1166    X_FREE(autoglobals) 
     1167#endif 
    11021168    X_FREE(classinfos) 
    11031169    X_FREE(funcinfos) 
  • trunk/xcache.h

    r263 r268  
    128128        add_assoc_zval_ex(arg, key, key_len, value) 
    129129 
     130#   define zend_u_is_auto_global(type, name, name_len) \ 
     131        zend_is_auto_global(name, name_len) 
    130132#endif 
    131133/* }}} */ 
     
    221223} xc_funcinfo_t; 
    222224/* }}} */ 
     225#ifdef ZEND_ENGINE_2_1 
     226/* {{{ xc_autoglobal_t */ 
     227typedef struct { 
     228#ifdef IS_UNICODE 
     229    zend_uchar type; 
     230#endif 
     231    zstr       key; 
     232    zend_uint  key_len; 
     233} xc_autoglobal_t; 
     234/* }}} */ 
     235#endif 
    223236typedef enum { XC_TYPE_PHP, XC_TYPE_VAR } xc_entry_type_t; 
    224237/* {{{ xc_entry_data_php_t */ 
     
    244257    xc_classinfo_t *classinfos; 
    245258    zend_bool have_early_binding; 
     259 
     260#ifdef ZEND_ENGINE_2_1 
     261    zend_uint autoglobal_cnt; 
     262    xc_autoglobal_t *autoglobals; 
     263#endif 
    246264} xc_entry_data_php_t; 
    247265/* }}} */ 
  • trunk/xcache.ini

    r204 r268  
    99;; or win32: 
    1010; extension = php_xcache.dll 
    11  
    12 ; required for >=php5.1 if you turn XCache on 
    13 auto_globals_jit = Off 
    1411 
    1512[xcache.admin] 
Note: See TracChangeset for help on using the changeset viewer.