Changeset 32482 in spip-zone for _plugins_/memoization/memo/xcache.inc


Ignore:
Timestamp:
Oct 29, 2009, 9:36:13 PM (10 years ago)
Author:
fil@…
Message:

reglage des lock

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/memoization/memo/xcache.inc

    r32480 r32482  
    1515
    1616@define('_CACHE_NAMESPACE', $_SERVER['HTTP_HOST'].':');
     17@define('_LOCK_MAX', 30); # max lock time (seconds)
    1718
    1819function cache_get($key) {
     
    3536
    3637function cache_inc($key, $value=null, $ttl=null) {
    37         return xcache_inc(_CACHE_NAMESPACE.$key, $value, $ttl);
     38        $a = func_get_args();
     39        $a[0] = _CACHE_NAMESPACE.$key;
     40        return call_user_func_array('xcache_inc', $a);
    3841}
    3942
    4043function cache_dec($key, $value=null, $ttl=null) {
    41         return xcache_dec(_CACHE_NAMESPACE.$key, $value, $ttl);
     44        $a = func_get_args();
     45        $a[0] = _CACHE_NAMESPACE.$key;
     46        return call_user_func_array('xcache_dec', $a);
    4247}
    4348
    44 function cache_lock($key) {
    45         return cache_inc('lock::'.$key)===1;
     49function cache_lock($key, /* private */ $unlock = false) {
     50        static $locks = array();
     51
     52        /* unlock */
     53        if ($unlock) {
     54                unset($locks[$key]);
     55                cache_unset('lock::'.$key);
     56        }
     57        /* lock */
     58        else {
     59                if (!isset($locks[$key])) {
     60                        while (cache_isset('lock::'.$key)
     61                        OR cache_inc('lock::'.$key, 1, _LOCK_MAX) !== 1)
     62                                sleep (1);
     63                        register_shutdown_function('cache_lock', $key, true);
     64                }
     65        }
    4666}
    4767
    4868function cache_unlock($key) {
    49         return cache_unset('lock::'.$key);
     69        cache_lock($key, true);
    5070}
    5171
Note: See TracChangeset for help on using the changeset viewer.