/* Moves new to old tree, initializes new tree, and clears former old tree location */ static void FlipTree( void ) { void * flip = cache.temporary_tree_old; // old old saved for later clearing void * flip_alias = cache.temporary_alias_tree_old; // old old saved for later clearing /* Flip caches! old = new. New truncated, reset time and counters and flag */ LEVEL_DEBUG("Flipping cache tree (purging timed-out data)"); // move "new" pointers to "old" cache.temporary_tree_old = cache.temporary_tree_new; cache.old_ram_size = cache.new_ram_size; cache.temporary_alias_tree_old = cache.temporary_alias_tree_new; // New cache setup cache.temporary_tree_new = NULL; cache.temporary_alias_tree_new = NULL; cache.new_ram_size = 0; cache.added = 0; // set up "old" cache times cache.time_retired = NOW_TIME; cache.time_to_kill = cache.time_retired + cache.retired_lifespan; // delete really old tree LEVEL_DEBUG("flip cache. tdestroy() will be called."); SAFETDESTROY( flip, owfree_func); SAFETDESTROY( flip_alias, owfree_func); STATLOCK; ++cache_flips; /* statistics */ memcpy(&old_avg, &new_avg, sizeof(struct average)); AVERAGE_CLEAR(&new_avg); STATUNLOCK; }
void ow_regdestroy( void ) { // twalk( regex_tree, regexaction ) ; twalk( regex_tree, regexkillaction ) ; SAFETDESTROY( regex_tree, owfree_func ) ; LEVEL_DEBUG("Regex destroy done") ; regex_tree = NULL ; }
/* Note: done in a simgle single thread mode so locking not needed */ void Cache_Close(void) { Cache_Clear() ; SAFETDESTROY( cache.persistent_tree, owfree_func); SAFETDESTROY( cache.persistent_alias_tree, owfree_func); }