Changeset 976 in svn


Ignore:
Timestamp:
2012-07-14T04:44:18Z (3 years ago)
Author:
Xuefer
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.