cache_item_t *beast_cache_create(cache_key_t *key, int size) { cache_item_t *item, *next; int i, msize, bsize; int pid = (int)getpid(); msize = sizeof(*item) + size; bsize = sizeof(cache_item_t *) * BUCKETS_DEFAULT_SIZE; if ((msize + bsize) > beast_mm_realspace()) { beast_write_log(beast_log_error, "Cache item size too big"); return NULL; } item = beast_mm_malloc(msize); if (!item) { #if 0 int index; /* clean all caches */ beast_spinlock(cache_lock, pid); for (index = 0; index < BUCKETS_DEFAULT_SIZE; index++) { beast_cache_buckets[index] = NULL; } beast_mm_flush(); beast_spinunlock(cache_lock, pid); item = beast_mm_malloc(msize); if (!item) { return NULL; } #endif beast_write_log(beast_log_notice, "Not enough caches, " "please setting <beast.cache_size> bigger in `php.ini' file"); return NULL; } item->key.device = key->device; item->key.inode = key->inode; item->key.fsize = key->fsize; item->key.mtime = key->mtime; item->next = NULL; return item; }
cache_item_t *beast_cache_create(cache_key_t *key, int size) { cache_item_t *item, *next; int i, msize, bsize; msize = sizeof(*item) + size; bsize = sizeof(cache_item_t *) * BUCKETS_DEFAULT_SIZE; if ((msize + bsize) > beast_mm_realspace()) { beast_write_log(beast_log_error, "Cache item size too big"); return NULL; } item = beast_mm_malloc(msize); if (!item) { int index; beast_locker_lock(beast_cache_locker); for (index = 0; index < BUCKETS_DEFAULT_SIZE; index++) { beast_cache_buckets[index] = NULL; } beast_locker_unlock(beast_cache_locker); beast_mm_flush(); /* clean all caches */ item = beast_mm_malloc(msize); if (!item) { return NULL; } } item->key.device = key->device; item->key.inode = key->inode; item->key.fsize = key->fsize; item->key.mtime = key->mtime; item->next = NULL; return item; }