/* Public function: Free all memory allocated by the global HS circuitmap. */ void hs_circuitmap_free_all(void) { if (the_hs_circuitmap) { HT_CLEAR(hs_circuitmap_ht, the_hs_circuitmap); tor_free(the_hs_circuitmap); } }
void sandbox_free_getaddrinfo_cache(void) { cached_getaddrinfo_item_t **next, **item; for (item = HT_START(getaddrinfo_cache, &getaddrinfo_cache); item; item = next) { next = HT_NEXT_RMV(getaddrinfo_cache, &getaddrinfo_cache, item); cached_getaddrinfo_item_free(*item); } HT_CLEAR(getaddrinfo_cache, &getaddrinfo_cache); }
/** Free all global TLS structures. */ void tor_tls_free_all(void) { if (global_tls_context) { tor_tls_context_decref(global_tls_context); global_tls_context = NULL; } if (!HT_EMPTY(&tlsmap_root)) { log_warn(LD_MM, "Still have entries in the tlsmap at shutdown."); } HT_CLEAR(tlsmap, &tlsmap_root); #ifdef V2_HANDSHAKE_CLIENT if (CLIENT_CIPHER_DUMMIES) tor_free(CLIENT_CIPHER_DUMMIES); if (CLIENT_CIPHER_STACK) sk_SSL_CIPHER_free(CLIENT_CIPHER_STACK); #endif }
void fp_pair_map_free(fp_pair_map_t *map, void (*free_val)(void*)) { fp_pair_map_entry_t **ent, **next, *this; if (map) { for (ent = HT_START(fp_pair_map_impl, &(map->head)); ent != NULL; ent = next) { this = *ent; next = HT_NEXT_RMV(fp_pair_map_impl, &(map->head), ent); if (free_val) free_val(this->val); tor_free(this); } tor_assert(HT_EMPTY(&(map->head))); HT_CLEAR(fp_pair_map_impl, &(map->head)); tor_free(map); } }
/** Release all storage held by circuits. */ void circuit_free_all(void) { circuit_t *next; while (global_circuitlist) { next = global_circuitlist->next; if (! CIRCUIT_IS_ORIGIN(global_circuitlist)) { or_circuit_t *or_circ = TO_OR_CIRCUIT(global_circuitlist); while (or_circ->resolving_streams) { edge_connection_t *next_conn; next_conn = or_circ->resolving_streams->next_stream; connection_free(TO_CONN(or_circ->resolving_streams)); or_circ->resolving_streams = next_conn; } } circuit_free(global_circuitlist); global_circuitlist = next; } if (circuits_pending_or_conns) { smartlist_free(circuits_pending_or_conns); circuits_pending_or_conns = NULL; } HT_CLEAR(orconn_circid_map, &orconn_circid_circuit_map); }