Changeset 344 in svn


Ignore:
Timestamp:
2007-02-04T07:22:14+01:00 (9 years ago)
Author:
Xuefer
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.