Changeset 1234


Ignore:
Timestamp:
2013-03-25T09:11:46+01:00 (18 months ago)
Author:
moo
Message:

compatiblity with fcntl

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r1230 r1234  
    1 3.1.0 2012-??-?? 
     13.1.0 2013-??-?? 
    22ChangeLog 
    33======== 
    44 * adds support for PHP_5_5 
     5 * compatible with fcntl fork 
    56 
    673.0.2 2013-??-?? 
  • trunk/NEWS

    r1230 r1234  
    1 3.1.0 2012-??-?? 
     13.1.0 2013-??-?? 
    22======== 
    33 * adds support for PHP_5_5 
     4 * compatible with fcntl fork 
    45 
    563.0.2 2013-??-?? 
  • trunk/mod_cacher/xc_cacher.c

    r1217 r1234  
    156156 
    157157typedef enum { XC_TYPE_PHP, XC_TYPE_VAR } xc_entry_type_t; 
     158 
     159static void xc_holds_init(TSRMLS_D); 
     160static void xc_holds_destroy(TSRMLS_D); 
    158161 
    159162/* any function in *_unlocked is only safe be called within locked (single thread access) area */ 
     
    395398{ 
    396399    TRACE("hold %d:%s", entry->file_inode, entry->entry.name.str.val); 
     400#ifndef ZEND_WIN32 
     401    if (XG(holds_pid) != getpid()) { 
     402        xc_holds_destroy(TSRMLS_C); 
     403        xc_holds_init(TSRMLS_C); 
     404    } 
     405#endif 
    397406    entry->refcount ++; 
    398407    xc_stack_push(&XG(php_holds)[cache->cacheid], (void *)entry); 
     
    26712680static void xc_destroy() /* {{{ */ 
    26722681{ 
     2682    TSRMLS_FETCH(); 
     2683 
    26732684    xc_shm_t *shm = NULL; 
    26742685    if (old_compile_file && zend_compile_file == xc_compile_file) { 
     
    26912702    } 
    26922703 
     2704    xc_holds_destroy(TSRMLS_C); 
     2705 
    26932706    xc_initized = 0; 
    26942707} 
     
    27352748} 
    27362749/* }}} */ 
    2737 static void xc_request_init(TSRMLS_D) /* {{{ */ 
     2750static void xc_holds_init(TSRMLS_D) /* {{{ */ 
    27382751{ 
    27392752    size_t i; 
    27402753 
    2741     if (!XG(internal_table_copied)) { 
    2742         zend_function tmp_func; 
    2743         xc_cest_t tmp_cest; 
    2744  
    2745 #ifdef HAVE_XCACHE_CONSTANT 
    2746         zend_hash_destroy(&XG(internal_constant_table)); 
    2747 #endif 
    2748         zend_hash_destroy(&XG(internal_function_table)); 
    2749         zend_hash_destroy(&XG(internal_class_table)); 
    2750  
    2751 #ifdef HAVE_XCACHE_CONSTANT 
    2752         zend_hash_init_ex(&XG(internal_constant_table), 20,  NULL, (dtor_func_t) xc_zend_constant_dtor, 1, 0); 
    2753 #endif 
    2754         zend_hash_init_ex(&XG(internal_function_table), 100, NULL, NULL, 1, 0); 
    2755         zend_hash_init_ex(&XG(internal_class_table),    10,  NULL, NULL, 1, 0); 
    2756  
    2757 #ifdef HAVE_XCACHE_CONSTANT 
    2758         xc_copy_internal_zend_constants(&XG(internal_constant_table), EG(zend_constants)); 
    2759 #endif 
    2760         zend_hash_copy(&XG(internal_function_table), CG(function_table), NULL, &tmp_func, sizeof(tmp_func)); 
    2761         zend_hash_copy(&XG(internal_class_table), CG(class_table), NULL, &tmp_cest, sizeof(tmp_cest)); 
    2762  
    2763         XG(internal_table_copied) = 1; 
    2764     } 
     2754#ifndef ZEND_WIN32 
     2755    XG(holds_pid) = getpid(); 
     2756#endif 
     2757 
    27652758    if (xc_php_caches && !XG(php_holds)) { 
    27662759        XG(php_holds_size) = xc_php_hcache.size; 
     
    27782771        } 
    27792772    } 
     2773} 
     2774/* }}} */ 
     2775static void xc_holds_destroy(TSRMLS_D) /* {{{ */ 
     2776{ 
     2777    size_t i; 
     2778 
     2779    if (xc_php_caches && XG(php_holds)) { 
     2780        for (i = 0; i < XG(php_holds_size); i ++) { 
     2781            xc_stack_destroy(&XG(php_holds[i])); 
     2782        } 
     2783        free(XG(php_holds)); 
     2784        XG(php_holds) = NULL; 
     2785        XG(php_holds_size) = 0; 
     2786    } 
     2787 
     2788    if (xc_var_caches && XG(var_holds)) { 
     2789        for (i = 0; i < XG(var_holds_size); i ++) { 
     2790            xc_stack_destroy(&XG(var_holds[i])); 
     2791        } 
     2792        free(XG(var_holds)); 
     2793        XG(var_holds) = NULL; 
     2794        XG(var_holds_size) = 0; 
     2795    } 
     2796} 
     2797/* }}} */ 
     2798static void xc_request_init(TSRMLS_D) /* {{{ */ 
     2799{ 
     2800    if (!XG(internal_table_copied)) { 
     2801        zend_function tmp_func; 
     2802        xc_cest_t tmp_cest; 
     2803 
     2804#ifdef HAVE_XCACHE_CONSTANT 
     2805        zend_hash_destroy(&XG(internal_constant_table)); 
     2806#endif 
     2807        zend_hash_destroy(&XG(internal_function_table)); 
     2808        zend_hash_destroy(&XG(internal_class_table)); 
     2809 
     2810#ifdef HAVE_XCACHE_CONSTANT 
     2811        zend_hash_init_ex(&XG(internal_constant_table), 20,  NULL, (dtor_func_t) xc_zend_constant_dtor, 1, 0); 
     2812#endif 
     2813        zend_hash_init_ex(&XG(internal_function_table), 100, NULL, NULL, 1, 0); 
     2814        zend_hash_init_ex(&XG(internal_class_table),    10,  NULL, NULL, 1, 0); 
     2815 
     2816#ifdef HAVE_XCACHE_CONSTANT 
     2817        xc_copy_internal_zend_constants(&XG(internal_constant_table), EG(zend_constants)); 
     2818#endif 
     2819        zend_hash_copy(&XG(internal_function_table), CG(function_table), NULL, &tmp_func, sizeof(tmp_func)); 
     2820        zend_hash_copy(&XG(internal_class_table), CG(class_table), NULL, &tmp_cest, sizeof(tmp_cest)); 
     2821 
     2822        XG(internal_table_copied) = 1; 
     2823    } 
     2824    xc_holds_init(TSRMLS_C); 
    27802825    xc_var_namespace_init(TSRMLS_C); 
    27812826#ifdef ZEND_ENGINE_2 
     
    27922837static void xc_request_shutdown(TSRMLS_D) /* {{{ */ 
    27932838{ 
    2794     xc_entry_unholds(TSRMLS_C); 
     2839#ifndef ZEND_WIN32 
     2840    if (XG(holds_pid) == getpid()) 
     2841#endif 
     2842    { 
     2843        xc_entry_unholds(TSRMLS_C); 
     2844    } 
    27952845    xc_gc_expires_php(TSRMLS_C); 
    27962846    xc_gc_expires_var(TSRMLS_C); 
  • trunk/xcache_globals.h

    r1196 r1234  
    1414    zend_bool coverager_started; 
    1515    HashTable *coverages;  /* coverages[file][line] = times */ 
     16#endif 
     17#ifndef ZEND_WIN32 
     18    pid_t holds_pid; 
    1619#endif 
    1720    xc_stack_t *php_holds; 
Note: See TracChangeset for help on using the changeset viewer.