Browse Source

MT#55283 directly pass port_pool to functions

Change-Id: Ifd68dc1b5bd53f4d5e9b74883f84104a02e86c18
pull/1910/head
Richard Fuchs 10 months ago
parent
commit
4e53f06fe6
1 changed files with 14 additions and 15 deletions
  1. +14
    -15
      daemon/media_socket.c

+ 14
- 15
daemon/media_socket.c View File

@ -84,7 +84,7 @@ struct packet_handler_ctx {
};
struct late_port_release {
socket_t socket;
struct intf_spec *spec;
struct port_pool *pp;
};
struct interface_stats_interval {
struct interface_stats_block stats;
@ -962,12 +962,12 @@ static void release_port_push(void *p) {
__C_DBG("Adding the port '%u' to late-release list", lpr->socket.local.port);
t_queue_push_tail(&ports_to_release, lpr);
}
static void release_port_poller(socket_t *r, struct intf_spec *spec, struct poller *poller) {
static void release_port_poller(socket_t *r, struct port_pool *pp, struct poller *poller) {
if (!r->local.port || r->fd == -1)
return;
struct late_port_release *lpr = g_slice_alloc(sizeof(*lpr));
move_socket(&lpr->socket, r);
lpr->spec = spec;
lpr->pp = pp;
if (!poller)
release_port_push(lpr);
else {
@ -975,20 +975,19 @@ static void release_port_poller(socket_t *r, struct intf_spec *spec, struct poll
rtpe_poller_del_item_callback(poller, lpr->socket.fd, release_port_push, lpr);
}
}
static void release_port(socket_t *r, struct intf_spec *spec) {
release_port_poller(r, spec, NULL);
static void release_port(socket_t *r, struct port_pool *pp) {
release_port_poller(r, pp, NULL);
}
static void free_port(socket_t *r, struct intf_spec *spec) {
release_port(r, spec);
static void free_port(socket_t *r, struct port_pool *pp) {
release_port(r, pp);
g_slice_free1(sizeof(*r), r);
}
/**
* Logic responsible for devastating the `ports_to_release` queue.
* It's being called by main poller.
*/
static void release_port_now(socket_t *r, struct intf_spec *spec) {
static void release_port_now(socket_t *r, struct port_pool *pp) {
unsigned int port = r->local.port;
struct port_pool *pp = &spec->port_pool;
__C_DBG("Trying to release the port '%u'", port);
@ -1024,7 +1023,7 @@ enum thread_looper_action release_closed_sockets(void) {
mutex_unlock(&ports_to_release_glob_lock);
while ((lpr = t_queue_pop_head(&ports_left))) {
release_port_now(&lpr->socket, lpr->spec);
release_port_now(&lpr->socket, lpr->pp);
g_slice_free1(sizeof(*lpr), lpr);
}
}
@ -1073,7 +1072,7 @@ int __get_consecutive_ports(socket_q *out, unsigned int num_ports, unsigned int
free_ports_q = &pp->free_ports_q;
/* a presence of free lists data is critical for us */
if (!(free_ports_q && free_ports_q->head)) {
if (!free_ports_q->head) {
ilog(LOG_ERR, "Failure while trying to get a list of free ports");
goto fail;
}
@ -1224,7 +1223,7 @@ new_cycle:
release_restart:
/* release all previously engaged sockets */
while ((sk = t_queue_pop_head(out)))
free_port(sk, spec); /* engaged ports will be released here */
free_port(sk, pp); /* engaged ports will be released here */
/* do not re-try for specifically wanted ports */
if (wanted_start_port > 0)
@ -1299,7 +1298,7 @@ void free_socket_intf_list(struct socket_intf_list *il) {
socket_t *sock;
while ((sock = t_queue_pop_head(&il->list)))
free_port(sock, il->local_intf->spec);
free_port(sock, &il->local_intf->spec->port_pool);
g_slice_free1(sizeof(*il), il);
}
void free_sfd_intf_list(struct sfd_intf_list *il) {
@ -3112,7 +3111,7 @@ out:
static void stream_fd_free(stream_fd *f) {
release_port(&f->socket, f->local_intf->spec);
release_port(&f->socket, &f->local_intf->spec->port_pool);
crypto_cleanup(&f->crypto);
dtls_connection_cleanup(&f->dtls);
@ -3177,7 +3176,7 @@ void stream_fd_release(stream_fd *sfd) {
&sfd->socket.local); // releases reference
}
release_port_poller(&sfd->socket, sfd->local_intf->spec, sfd->poller);
release_port_poller(&sfd->socket, &sfd->local_intf->spec->port_pool, sfd->poller);
}


Loading…
Cancel
Save