From 37b27f69d2ae3768ed2fbcf3f81e3eac64fe5463 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 7 May 2025 08:45:03 -0400 Subject: [PATCH] MT#55283 add global bufferpool These are normally held per thread, but in cases of threads not having dedicated init/cleanup functions (GLib thread pool), we can use a global one as fallback. Fixes #1936 Change-Id: Ia2ff3523e6079baa73e0721862100ec2f8b66c88 (cherry picked from commit 5d613020e62f182e0659944a30e92711b08c6857) (cherry picked from commit 7878526243229958e56d6b0c2e4f80eda3e3a933) --- daemon/main.c | 3 +++ daemon/websocket.c | 2 ++ include/main.h | 1 + t/test-stats.c | 1 + t/test-transcode.c | 1 + 5 files changed, 8 insertions(+) diff --git a/daemon/main.c b/daemon/main.c index 34957625a..898724fd9 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -80,6 +80,7 @@ static GQueue rtpe_cli = G_QUEUE_INIT; GQueue rtpe_control_ng = G_QUEUE_INIT; GQueue rtpe_control_ng_tcp = G_QUEUE_INIT; struct bufferpool *shm_bufferpool; +struct bufferpool *rtpe_bufferpool; memory_arena_t rtpe_arena; struct rtpengine_config rtpe_config = { @@ -1453,6 +1454,7 @@ RTPE_CONFIG_CHARPP_PARAMS static void early_init(void) { socket_init(); // needed for socktype_udp + rtpe_bufferpool = bufferpool_new(bufferpool_aligned_alloc, bufferpool_aligned_free); memory_arena_init(&rtpe_arena); memory_arena = &rtpe_arena; } @@ -1939,6 +1941,7 @@ int main(int argc, char **argv) { options_free(); bufferpool_cleanup(); memory_arena_free(&rtpe_arena); + bufferpool_destroy(rtpe_bufferpool); return 0; } diff --git a/daemon/websocket.c b/daemon/websocket.c index b88d56f6e..42849adf8 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -230,6 +230,8 @@ static void websocket_message_push(struct websocket_conn *wc, websocket_message_ static void websocket_process(void *p, void *up) { + media_bufferpool = rtpe_bufferpool; + struct websocket_conn *wc = p; mutex_lock(&wc->lock); diff --git a/include/main.h b/include/main.h index 1550ef174..91a89f14f 100644 --- a/include/main.h +++ b/include/main.h @@ -323,6 +323,7 @@ extern GQueue rtpe_control_ng; extern GQueue rtpe_control_ng_tcp; extern struct bufferpool *shm_bufferpool; +extern struct bufferpool *rtpe_bufferpool; extern memory_arena_t rtpe_arena; diff --git a/t/test-stats.c b/t/test-stats.c index fc792a775..fe0000253 100644 --- a/t/test-stats.c +++ b/t/test-stats.c @@ -25,6 +25,7 @@ unsigned int rtpe_poller_rr_iter; GString *dtmf_logs; GQueue rtpe_control_ng = G_QUEUE_INIT; struct bufferpool *shm_bufferpool; +struct bufferpool *rtpe_bufferpool; memory_arena_t rtpe_arena; static void __assert_g_string_eq(GString *a, const char *b, unsigned int line) { diff --git a/t/test-transcode.c b/t/test-transcode.c index 2492d71e8..6c685a14a 100644 --- a/t/test-transcode.c +++ b/t/test-transcode.c @@ -20,6 +20,7 @@ unsigned int rtpe_poller_rr_iter; GString *dtmf_logs; GQueue rtpe_control_ng = G_QUEUE_INIT; struct bufferpool *shm_bufferpool; +struct bufferpool *rtpe_bufferpool; memory_arena_t rtpe_arena; static str *sdup(char *s) {