Changeset 976 for trunk/xcache.c


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

closes #174: updated api for clear all cache

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.