From c024b54dc316cdaca9de431a4cd2302443aa98df Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Tue, 28 Mar 2023 16:20:39 +0200 Subject: [PATCH] MT#56750 Deprecate unused objects of `media_socket.port_pool` We have to stop using objects of `struct port_pool` (media_socket.h), becasue a newer approach introduced for ports allocations deprecates usage of them. Deprecated objects: `port_pool.last_used` `port_pool.ports_used` `port_pool.free_list` `port_pool.free_list_used` Change-Id: I70e166753da7a43cb3b6b188c83d978b7dbce046 --- daemon/cli.c | 5 +---- daemon/graphite.c | 4 ++-- daemon/media_socket.c | 22 +++++++++++++++++----- daemon/statistics.c | 4 +--- include/media_socket.h | 7 ------- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/daemon/cli.c b/daemon/cli.c index cc4ebba48..59f7c316b 100644 --- a/daemon/cli.c +++ b/daemon/cli.c @@ -1650,13 +1650,10 @@ static void cli_incoming_list_interfaces(str *instr, struct cli_writer *cw) { cw->cw_printf(cw, " Port range: %5u - %5u\n", lif->spec->port_pool.min, lif->spec->port_pool.max); - unsigned int f = g_atomic_int_get(&lif->spec->port_pool.free_ports); - unsigned int l = g_atomic_int_get(&lif->spec->port_pool.last_used); + unsigned int f = g_hash_table_size(lif->spec->port_pool.free_ports_ht); unsigned int r = lif->spec->port_pool.max - lif->spec->port_pool.min + 1; cw->cw_printf(cw, " Ports used: %5u / %5u (%5.1f%%)\n", r - f, r, (double) (r - f) * 100.0 / r); - cw->cw_printf(cw, " Last port used: %5u\n", - l); } } diff --git a/daemon/graphite.c b/daemon/graphite.c index 8eb1e6b3c..81c57bfa0 100644 --- a/daemon/graphite.c +++ b/daemon/graphite.c @@ -185,10 +185,10 @@ GString *print_graphite_data(void) { int num_ports = lif->spec->port_pool.max - lif->spec->port_pool.min + 1; GPF("ports_free_%s_%s %i", lif->logical->name.s, sockaddr_print_buf(&lif->spec->local_address.addr), - g_atomic_int_get(&lif->spec->port_pool.free_ports)); + g_hash_table_size(lif->spec->port_pool.free_ports_ht)); GPF("ports_used_%s_%s %i", lif->logical->name.s, sockaddr_print_buf(&lif->spec->local_address.addr), - num_ports - g_atomic_int_get(&lif->spec->port_pool.free_ports)); + num_ports - g_hash_table_size(lif->spec->port_pool.free_ports_ht)); } mutex_lock(&rtpe_codec_stats_lock); diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 54998f6e0..6f092363c 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -429,7 +429,7 @@ static int has_free_ports_loc(struct local_intf *loc, unsigned int num_ports) { return 0; } - if (num_ports > g_atomic_int_get(&loc->spec->port_pool.free_ports)) { + if (num_ports > g_hash_table_size(loc->spec->port_pool.free_ports_ht)) { ilog(LOG_ERR, "Didn't find %d ports available for " STR_FORMAT "/%s", num_ports, STR_FMT(&loc->logical->name), sockaddr_print_buf(&loc->spec->local_address.addr)); @@ -439,7 +439,7 @@ static int has_free_ports_loc(struct local_intf *loc, unsigned int num_ports) { __C_DBG("Found %d ports available for " STR_FORMAT "/%s from total of %d free ports", num_ports, STR_FMT(&loc->logical->name), sockaddr_print_buf(&loc->spec->local_address.addr), - loc->spec->port_pool.free_ports); + g_hash_table_size(loc->spec->port_pool.free_ports_ht)); return 1; } @@ -844,14 +844,27 @@ void interfaces_init(GQueue *interfaces) { } void interfaces_exclude_port(unsigned int port) { - GList *vals, *l; + GList *vals, *l, *ll; struct intf_spec *spec; + struct port_pool *pp; + GQueue * free_ports_q; + GHashTable * free_ports_ht; + vals = g_hash_table_get_values(__intf_spec_addr_type_hash); for (l = vals; l; l = l->next) { spec = l->data; - bit_array_set(spec->port_pool.ports_used, port); + + pp = &spec->port_pool; + free_ports_q = &pp->free_ports_q; + free_ports_ht = pp->free_ports_ht; + + mutex_lock(&pp->free_list_lock); + ll = g_hash_table_lookup(free_ports_ht, GUINT_TO_POINTER(port)); + if (ll) + reserve_port(free_ports_q, free_ports_ht, l, port); + mutex_unlock(&pp->free_list_lock); } g_list_free(vals); @@ -3154,7 +3167,6 @@ void interfaces_free(void) { for (GList *l = ll; l; l = l->next) { struct intf_spec *spec = l->data; struct port_pool *pp = &spec->port_pool; - g_queue_clear(&pp->free_list); /* TODO: deprecate it */ if (pp->free_ports_ht) { g_hash_table_destroy(pp->free_ports_ht); } diff --git a/daemon/statistics.c b/daemon/statistics.c index d22161a35..3388424d9 100644 --- a/daemon/statistics.c +++ b/daemon/statistics.c @@ -663,8 +663,7 @@ GQueue *statistics_gather_metrics(struct interface_sampled_rate_stats *interface METRICs("min", "%u", lif->spec->port_pool.min); METRICs("max", "%u", lif->spec->port_pool.max); - unsigned int f = g_atomic_int_get(&lif->spec->port_pool.free_ports); - unsigned int l = g_atomic_int_get(&lif->spec->port_pool.last_used); + unsigned int f = g_hash_table_size(lif->spec->port_pool.free_ports_ht); unsigned int r = lif->spec->port_pool.max - lif->spec->port_pool.min + 1; METRICs("used", "%u", r - f); PROM("ports_used", "gauge"); @@ -679,7 +678,6 @@ GQueue *statistics_gather_metrics(struct interface_sampled_rate_stats *interface PROM("ports", "gauge"); PROMLAB("name=\"%s\",address=\"%s\"", lif->logical->name.s, sockaddr_print_buf(&lif->spec->local_address.addr)); - METRICs("last", "%u", l); HEADER("}", NULL); diff --git a/include/media_socket.h b/include/media_socket.h index 22ba1a252..3544fdd10 100644 --- a/include/media_socket.h +++ b/include/media_socket.h @@ -79,16 +79,9 @@ struct logical_intf { str name_base; // if name is "foo:bar", this is "foo" }; struct port_pool { - BIT_ARRAY_DECLARE(ports_used, 0x10000); - volatile unsigned int last_used; - volatile unsigned int free_ports; - unsigned int min, max; mutex_t free_list_lock; - GQueue free_list; - - BIT_ARRAY_DECLARE(free_list_used, 0x10000); GQueue free_ports_q; /* for getting the next free port */ GHashTable * free_ports_ht; /* for a lookup, if the port is used */