Changeset 344


Ignore:
Timestamp:
2007-02-04T07:22:14+01:00 (8 years ago)
Author:
moo
Message:

copy internal functions/classes into sandbox, they're needed by compiler

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/utils.c

    r305 r344  
    11 
    22#include "xcache.h" 
     3#include "stack.h" 
     4#include "xcache_globals.h" 
    35#include "utils.h" 
    46#ifdef ZEND_ENGINE_2_1 
     
    531533{ 
    532534    HashTable *h; 
     535    zend_function tmp_func; 
     536    xc_cest_t tmp_cest; 
     537 
    533538    if (sandbox) { 
    534539        memset(sandbox, 0, sizeof(sandbox[0])); 
     
    567572    h = OG(function_table); 
    568573    zend_hash_init_ex(&TG(function_table), 128, NULL, h->pDestructor, h->persistent, h->bApplyProtection); 
     574    zend_hash_copy(&TG(function_table), &XG(internal_function_table), NULL, (void *) &tmp_func, sizeof(tmp_func)); 
     575    TG(internal_class_tail) = TG(function_table).pListTail; 
     576 
    569577    h = OG(class_table); 
    570578    zend_hash_init_ex(&TG(class_table),     16, NULL, h->pDestructor, h->persistent, h->bApplyProtection); 
     579    zend_hash_copy(&TG(class_table), &XG(internal_class_table), NULL, (void *) &tmp_cest, sizeof(tmp_cest)); 
     580    TG(internal_class_tail) = TG(class_table).pListTail; 
     581 
    571582#ifdef ZEND_ENGINE_2_1 
    572583    /* shallow copy, don't destruct */ 
     
    613624#endif 
    614625 
    615     b = TG(function_table).pListHead; 
     626    b = TG(internal_function_tail) ? TG(internal_function_tail)->pListNext : TG(function_table).pListHead; 
    616627    /* install function */ 
    617628    while (b != NULL) { 
     
    622633    } 
    623634 
    624     b = TG(class_table).pListHead; 
     635    b = TG(internal_class_tail) ? TG(internal_class_tail)->pListNext : TG(class_table).pListHead; 
    625636    /* install class */ 
    626637    while (b != NULL) { 
  • trunk/utils.h

    r305 r344  
    7171    HashTable tmp_class_table; 
    7272    HashTable tmp_auto_globals; 
     73    Bucket    *tmp_internal_function_tail; 
     74    Bucket    *tmp_internal_class_tail; 
    7375} xc_sandbox_t; 
    7476 
  • trunk/xcache.c

    r341 r344  
    10251025        Bucket *b; 
    10261026        unsigned int i; 
     1027        unsigned int j; 
    10271028 
    10281029#define COPY_H(vartype, var, cnt, name, datatype) do {        \ 
    1029     for (i = 0; b; i ++, b = b->pListNext) {                  \ 
    1030         vartype *data = &php->var[i];                         \ 
     1030    for (i = 0, j = 0; b; i ++, b = b->pListNext) {           \ 
     1031        vartype *data = &php->var[j];                         \ 
    10311032                                                              \ 
    10321033        if (i < old_##cnt) {                                  \ 
    10331034            continue;                                         \ 
    10341035        }                                                     \ 
     1036        j ++;                                                 \ 
    10351037                                                              \ 
    10361038        assert(i < old_##cnt + php->cnt);                     \ 
     
    16031605    int i; 
    16041606 
     1607    if (XG(internal_function_table).nTableSize == 0) { 
     1608        zend_function tmp_func; 
     1609        xc_cest_t tmp_cest; 
     1610 
     1611        zend_hash_init_ex(&XG(internal_function_table), 100, NULL, NULL, 1, 0); 
     1612        zend_hash_copy(&XG(internal_function_table), CG(function_table), NULL, &tmp_func, sizeof(tmp_func)); 
     1613 
     1614        zend_hash_init_ex(&XG(internal_class_table), 10, NULL, NULL, 1, 0); 
     1615        zend_hash_copy(&XG(internal_class_table), CG(class_table), NULL, &tmp_cest, sizeof(tmp_cest)); 
     1616    } 
    16051617    if (xc_php_hcache.size && !XG(php_holds)) { 
    16061618        XG(php_holds) = calloc(xc_php_hcache.size, sizeof(xc_stack_t)); 
     
    16761688        xcache_globals->var_holds = NULL; 
    16771689    } 
     1690 
     1691    zend_hash_destroy(&xcache_globals->internal_function_table); 
     1692    zend_hash_destroy(&xcache_globals->internal_class_table); 
    16781693} 
    16791694/* }}} */ 
  • trunk/xcache_globals.h

    r204 r344  
    1515    time_t request_time; 
    1616    long   var_ttl; 
     17 
     18    HashTable internal_function_table; 
     19    HashTable internal_class_table; 
    1720ZEND_END_MODULE_GLOBALS(xcache) 
    1821 
Note: See TracChangeset for help on using the changeset viewer.