static void clean_old_connections(request_rec *r) { upload_progress_node_t *prev = NULL; ServerConfig *config = get_server_config(r); CACHE_LOCK(); upload_progress_node_t *node = fetch_first_node(config); while(node != NULL) { if(time(NULL) > node->expires && node->done == 1 && node->expires != -1) { /*clean*/ if(prev == NULL) { /* head */ upload_progress_cache_t *cache = fetch_cache(config); cache->head = fetch_node(config, node->next); cache_free(config, node->key); cache_free(config, node); node = cache->head; continue; } else { prev->next = node->next; cache_free(config, node->key); cache_free(config, node); node = prev; continue; } } prev = node; node = fetch_node(config, node->next); } CACHE_UNLOCK(); }
void upload_progress_destroy_cache(ServerConfig *config) { upload_progress_cache_t *cache = fetch_cache(config); upload_progress_node_t *node, *temp; cache_free(config, cache); node = fetch_node(config, cache->head); while(node != NULL) { temp = fetch_node(config, node->next); cache_free(config, node); node = temp; } }
upload_progress_node_t *fetch_last_node(ServerConfig *config) { upload_progress_cache_t *cache; upload_progress_node_t *node; cache = fetch_cache(config); if(cache->head == NULL) { return NULL; } node = fetch_node(config, cache->head); while(node->next != NULL) { node = fetch_node(config, node->next); } return node; }
upload_progress_node_t *fetch_first_node(ServerConfig *config) { upload_progress_cache_t *cache; cache = fetch_cache(config); if(cache->head == NULL) { return NULL; } return fetch_node(config, cache->head); }
upload_progress_node_t *find_node(request_rec *r, const char *key) { upload_progress_node_t *node; ServerConfig *config = (ServerConfig*)ap_get_module_config(r->server->module_config, &upload_progress_module); node = fetch_first_node(config); if(node == NULL) { return NULL; } while(node != NULL) { if(check_node(config, node, key)) { return node; } node = fetch_node(config, node->next); } return node; }
void abstract_scheduled_actor::enqueue(actor* sender, any_tuple const& msg) { enqueue_node(fetch_node(sender, msg)); //enqueue_node(new queue_node(sender, msg)); }
void abstract_scheduled_actor::enqueue(actor* sender, any_tuple&& msg) { enqueue_node(fetch_node(sender, std::move(msg))); //enqueue_node(new queue_node(sender, std::move(msg))); }