void free_tables(struct Table_head *tables) { struct Table *iter; while ((iter = SLIST_FIRST(tables)) != NULL) { SLIST_REMOVE_HEAD(tables, entries); table_ref_put(iter); } }
/* * Copy contents of new_listener into existing listener */ static void listener_update(struct Listener *existing_listener, struct Listener *new_listener, const struct Table_head *tables) { assert(existing_listener != NULL); assert(new_listener != NULL); assert(address_compare(existing_listener->address, new_listener->address) == 0); free(existing_listener->fallback_address); existing_listener->fallback_address = new_listener->fallback_address; new_listener->fallback_address = NULL; free(existing_listener->source_address); existing_listener->source_address = new_listener->source_address; new_listener->source_address = NULL; existing_listener->protocol = new_listener->protocol; free(existing_listener->table_name); existing_listener->table_name = new_listener->table_name; new_listener->table_name = NULL; logger_ref_put(existing_listener->access_log); existing_listener->access_log = logger_ref_get(new_listener->access_log); existing_listener->log_bad_requests = new_listener->log_bad_requests; struct Table *new_table = table_lookup(tables, existing_listener->table_name); if (new_table != NULL) { init_table(new_table); table_ref_put(existing_listener->table); existing_listener->table = table_ref_get(new_table); table_ref_put(new_listener->table); new_listener->table = NULL; } }
static void free_listener(struct Listener *listener) { if (listener == NULL) return; free(listener->address); free(listener->fallback_address); free(listener->source_address); free(listener->table_name); table_ref_put(listener->table); listener->table == NULL; logger_ref_put(listener->access_log); listener->access_log = NULL; free(listener); }
void remove_table(struct Table_head *tables, struct Table *table) { SLIST_REMOVE(tables, table, Table, entries); table_ref_put(table); }