laforge has submitted this change. ( https://gerrit.osmocom.org/c/libosmo-abis/+/35502?usp=email )
Change subject: trau/osmo_ortp: support building without OrtpMemoryFunctions API ......................................................................
trau/osmo_ortp: support building without OrtpMemoryFunctions API
Recent ortp versions (v5.3.0+, maintained by linphone.org) no longer have the memory allocator configuration API. See the related commit:
https://gitlab.linphone.org/BC/public/ortp/-/commit/9ba9db486a61bebeb11287ea...
A similar API is provided by bctoolbox, a dependency of ortp:
void bctbx_set_memory_functions(BctoolboxMemoryFunctions *functions);
Let's support building against v5.3.0+ by checking (in ./configure) if the old API is available. Use talloc if possible; otherwise fall-back to whatever ortp uses by default (glibc's malloc).
Change-Id: I9fe6299fde81faeab86cd6645d67edd2f41e1873 --- M configure.ac M src/trau/osmo_ortp.c 2 files changed, 43 insertions(+), 4 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved pespin: Looks good to me, but someone else must approve
diff --git a/configure.ac b/configure.ac index 37ac91a..5097c93 100644 --- a/configure.ac +++ b/configure.ac @@ -161,6 +161,19 @@ [rtp_session_signal_connect requires ulong parameter])]) CFLAGS=$_cflags_save
+_cflags_save=$CFLAGS +CFLAGS="$CFLAGS $ORTP_CFLAGS" +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include <ortp/ortp.h>]], + [[OrtpMemoryFunctions memfn = { };]] + )], + [AC_DEFINE([HAVE_ORTP_MEM_FUNC], [1], + [OrtpMemoryFunctions is available, will use talloc])], + [AC_DEFINE([HAVE_ORTP_MEM_FUNC], [0], + [OrtpMemoryFunctions is not available])]) +CFLAGS=$_cflags_save + AC_MSG_RESULT([CFLAGS="$CFLAGS"]) AC_MSG_RESULT([CPPFLAGS="$CPPFLAGS"])
diff --git a/src/trau/osmo_ortp.c b/src/trau/osmo_ortp.c index 015ac34..701b81d 100644 --- a/src/trau/osmo_ortp.c +++ b/src/trau/osmo_ortp.c @@ -47,7 +47,7 @@ static void *tall_rtp_ctx;
/* malloc integration */ - +#if HAVE_ORTP_MEM_FUNC static void *osmo_ortp_malloc(size_t sz) { return talloc_size(tall_rtp_ctx, sz); @@ -68,6 +68,7 @@ .realloc_fun = osmo_ortp_realloc, .free_fun = osmo_ortp_free }; +#endif /* HAVE_ORTP_MEM_FUNC */
/* logging */
@@ -121,13 +122,14 @@
needs_endl = fmt[fmt_len - 1] != '\n' ? 1 : 0;
- str = osmo_ortp_malloc(domain_len + 2 /*": "*/ + fmt_len + needs_endl + 1); - sprintf(str, "%s%s%s%s", domain_str, domain_len ? ": " : "", fmt, needs_endl ? "\n" : ""); + str = talloc_asprintf(tall_rtp_ctx, "%s%s%s%s", + domain_str, domain_len ? ": " : "", + fmt, needs_endl ? "\n" : "");
osmo_vlogp(DLMIB, ortp_to_osmo_lvl(lev), __FILE__, 0, 0, str, args);
- osmo_ortp_free(str); + talloc_free(str);
}
@@ -315,7 +317,9 @@ void osmo_rtp_init(void *ctx) { tall_rtp_ctx = ctx; +#if HAVE_ORTP_MEM_FUNC ortp_set_memory_functions(&osmo_ortp_memfn); +#endif ortp_init(); ortp_set_log_level_mask( #if HAVE_ORTP_LOG_DOMAIN