Changeset 976


Ignore:
Timestamp:
2012-07-14T06:44:18+02:00 (22 months ago)
Author:
moo
Message:

closes #174: updated api for clear all cache

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r974 r976  
    112.1.0 2012-??-?? 
    2  * fixes #972: warning/error when XCache is loaded incorrectly 
    3  * fixes #73: warn for improper PHP_FCGI_CHILDREN setting fcgi mode 
     2API Changes 
     3======== 
     4 * chg: proto array xcache_clear_cache(int type, [ int id = -1 ]). -1 means all cache splits 
     5ChangeLog 
     6======== 
     7 * closes #972: warning/error when XCache is loaded incorrectly 
     8 * closes #73: warn for improper PHP_FCGI_CHILDREN setting fcgi mode 
     9 * closes #174: updated api for clear all cache 
    410 
    5112.0.1 2012-07-14 
  • trunk/admin/xcache.php

    r934 r976  
    239239        if (isset($_POST['clearcache'])) { 
    240240            $count = xcache_count($type); 
    241             if ($cacheid == $count) { 
     241            if ($cacheid >= 0) { 
    242242                for ($cacheid = 0; $cacheid < $count; $cacheid ++) { 
    243243                    xcache_clear_cache($type, $cacheid); 
     
    245245            } 
    246246            else { 
    247                 xcache_clear_cache($type, $cacheid); 
     247                xcache_clear_cache($type); 
    248248            } 
    249249        } 
     
    272272    $total['type'] = XC_TYPE_PHP; 
    273273    $total['cache_name'] = _T('Total'); 
    274     $total['cacheid'] = $pcnt; 
     274    $total['cacheid'] = -1; 
    275275    $total['gc'] = null; 
    276276    $total['istotal'] = true; 
     
    296296    $total['type'] = XC_TYPE_VAR; 
    297297    $total['cache_name'] = _T('Total'); 
    298     $total['cacheid'] = $vcnt; 
     298    $total['cacheid'] = -1; 
    299299    $total['gc'] = null; 
    300300    $total['istotal'] = true; 
  • trunk/xcache.c

    r975 r976  
    26832683} 
    26842684/* }}} */ 
     2685static void xc_clear(long type, xc_cache_t *cache TSRMLS_DC) /* {{{ */ 
     2686{ 
     2687    xc_entry_t *e, *next; 
     2688    int entryslotid, c; 
     2689 
     2690    ENTER_LOCK(cache) { 
     2691        for (entryslotid = 0, c = cache->hentry->size; entryslotid < c; entryslotid ++) { 
     2692            for (e = cache->entries[entryslotid]; e; e = next) { 
     2693                next = e->next; 
     2694                xc_entry_remove_unlocked(type, cache, entryslotid, e TSRMLS_CC); 
     2695            } 
     2696            cache->entries[entryslotid] = NULL; 
     2697        } 
     2698    } LEAVE_LOCK(cache); 
     2699} /* }}} */ 
    26852700/* {{{ xcache_admin_operate */ 
    26862701typedef enum { XC_OP_COUNT, XC_OP_INFO, XC_OP_LIST, XC_OP_CLEAR } xcache_op_type; 
     
    26982713    } 
    26992714 
    2700     if (optype == XC_OP_COUNT) { 
    2701         if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &type) == FAILURE) { 
    2702             return; 
    2703         } 
    2704     } 
    2705     else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &type, &id) == FAILURE) { 
    2706         return; 
     2715    switch (optype) { 
     2716        case XC_OP_COUNT: 
     2717            if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &type) == FAILURE) { 
     2718                return; 
     2719            } 
     2720            break; 
     2721        case XC_OP_CLEAR: 
     2722            id = -1; 
     2723            if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &type, &id) == FAILURE) { 
     2724                return; 
     2725            } 
     2726            break; 
     2727        default: 
     2728            if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &type, &id) == FAILURE) { 
     2729                return; 
     2730            } 
    27072731    } 
    27082732 
     
    27472771            } LEAVE_LOCK(cache); 
    27482772            break; 
     2773 
    27492774        case XC_OP_CLEAR: 
    2750             { 
    2751                 xc_entry_t *e, *next; 
    2752                 int entryslotid, c; 
    2753  
    2754                 if (!caches || id < 0 || id >= size) { 
    2755                     php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cache not exists"); 
    2756                     RETURN_FALSE; 
     2775            if (!caches || id < -1 || id >= size) { 
     2776                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cache not exists"); 
     2777                RETURN_FALSE; 
     2778            } 
     2779 
     2780            if (id == -1) { 
     2781                for (id = 0; id < size; ++id) { 
     2782                    xc_clear(type, caches[id] TSRMLS_CC); 
    27572783                } 
    2758  
    2759                 cache = caches[id]; 
    2760                 ENTER_LOCK(cache) { 
    2761                     for (entryslotid = 0, c = cache->hentry->size; entryslotid < c; entryslotid ++) { 
    2762                         for (e = cache->entries[entryslotid]; e; e = next) { 
    2763                             next = e->next; 
    2764                             xc_entry_remove_unlocked(type, cache, entryslotid, e TSRMLS_CC); 
    2765                         } 
    2766                         cache->entries[entryslotid] = NULL; 
    2767                     } 
    2768                 } LEAVE_LOCK(cache); 
    2769                 xc_gc_deletes(TSRMLS_C); 
    2770             } 
     2784            } 
     2785            else { 
     2786                xc_clear(type, caches[id] TSRMLS_CC); 
     2787            } 
     2788 
     2789            xc_gc_deletes(TSRMLS_C); 
    27712790            break; 
    27722791 
     
    27972816} 
    27982817/* }}} */ 
    2799 /* {{{ proto array xcache_clear_cache(int type, int id) 
     2818/* {{{ proto array xcache_clear_cache(int type, [ int id = -1 ]) 
    28002819   Clear cache by id on specified cache type */ 
    28012820PHP_FUNCTION(xcache_clear_cache) 
Note: See TracChangeset for help on using the changeset viewer.