From 5d613020e62f182e0659944a30e92711b08c6857 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 --- 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 931acd52b..24ef55b0b 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 = { @@ -1501,6 +1502,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; } @@ -1982,6 +1984,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 bbda2b435..60af44582 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 4f9d171fe..cb72ab0b0 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 b17d7cc69..1b2cbbe08 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 054984d99..152f6681d 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) {