MT#55283 use typed GQueue for ports release

Change-Id: I9cdaa88386c30f00ad4d18406b041ddb5c045e68
pull/1776/head
Richard Fuchs 2 years ago
parent f0eba3ca13
commit d23d9f8b42

@ -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);
}

@ -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)

Loading…
Cancel
Save