From d23d9f8b42d2b228785cdc4c18f60d5983ee381e Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Sat, 9 Dec 2023 12:32:41 -0500 Subject: [PATCH] MT#55283 use typed GQueue for ports release Change-Id: I9cdaa88386c30f00ad4d18406b041ddb5c045e68 --- daemon/media_socket.c | 18 ++++++++++-------- include/helpers.h | 14 -------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/daemon/media_socket.c b/daemon/media_socket.c index 703cf301b..5fce53f9d 100644 --- a/daemon/media_socket.c +++ b/daemon/media_socket.c @@ -99,11 +99,13 @@ struct interface_stats_interval { }; +TYPED_GQUEUE(ports_release, struct late_port_release) + /* thread scope (local) queue for sockets to be released, only appending here */ -static __thread GQueue ports_to_release = G_QUEUE_INIT; +static __thread ports_release_q ports_to_release = TYPED_GQUEUE_INIT; /* global queue for sockets to be released, releasing by `sockets_releaser()` is done using that */ -static GQueue ports_to_release_glob = G_QUEUE_INIT; -mutex_t ports_to_release_glob_lock = MUTEX_STATIC_INIT; +static ports_release_q ports_to_release_glob = TYPED_GQUEUE_INIT; +static mutex_t ports_to_release_glob_lock = MUTEX_STATIC_INIT; static const struct streamhandler *__determine_handler(struct packet_stream *in, struct sink_handler *); @@ -937,7 +939,7 @@ static void release_port(socket_t *r, struct intf_spec *spec) { struct late_port_release *lpr = g_slice_alloc(sizeof(*lpr)); move_socket(&lpr->socket, r); lpr->spec = spec; - g_queue_push_tail(&ports_to_release, lpr); + t_queue_push_tail(&ports_to_release, lpr); } static void free_port(socket_t *r, struct intf_spec *spec) { release_port(r, spec); @@ -983,11 +985,11 @@ enum thread_looper_action release_closed_sockets(void) { if (ports_to_release_glob.head) { mutex_lock(&ports_to_release_glob_lock); - GQueue ports_left = ports_to_release_glob; - g_queue_init(&ports_to_release_glob); + ports_release_q ports_left = ports_to_release_glob; + t_queue_init(&ports_to_release_glob); mutex_unlock(&ports_to_release_glob_lock); - while ((lpr = g_queue_pop_head(&ports_left))) { + while ((lpr = t_queue_pop_head(&ports_left))) { release_port_now(&lpr->socket, lpr->spec); g_slice_free1(sizeof(*lpr), lpr); } @@ -1000,7 +1002,7 @@ enum thread_looper_action release_closed_sockets(void) { */ void append_thread_lpr_to_glob_lpr(void) { mutex_lock(&ports_to_release_glob_lock); - g_queue_move(&ports_to_release_glob, &ports_to_release); /* dst, src */ + t_queue_move(&ports_to_release_glob, &ports_to_release); /* dst, src */ mutex_unlock(&ports_to_release_glob_lock); } diff --git a/include/helpers.h b/include/helpers.h index f716591b5..70ded6e9e 100644 --- a/include/helpers.h +++ b/include/helpers.h @@ -112,20 +112,6 @@ INLINE char *glib_json_print(JsonBuilder *builder) { /* GQUEUE */ -// appends `src` to the end of `dst` and clears out `src` -INLINE void g_queue_move(GQueue *dst, GQueue *src) { - if (!src->length) - return; - if (!dst->length) { - *dst = *src; - g_queue_init(src); - return; - } - dst->tail->next = src->head; - src->head->prev = dst->tail; - dst->length += src->length; - g_queue_init(src); -} INLINE void g_queue_append(GQueue *dst, const GQueue *src) { GList *l; if (!src || !dst)