Changeset 976 for trunk/xcache.c


Ignore:
Timestamp:
2012-07-14T06:44:18+02:00 (3 years 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.