track libulfius memory allocations using talloc

Change-Id: I9be666e5fac0caf6f7d07c01f39e0f409c7465db
This commit is contained in:
Harald Welte 2019-07-21 20:54:43 +02:00
parent 0b9fd3945a
commit fdb29d94e3
5 changed files with 44 additions and 4 deletions

View File

@ -35,6 +35,7 @@ PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.0.0)
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.4.0)
PKG_CHECK_MODULES(ULFIUS, libulfius)
PKG_CHECK_MODULES(JANSSON, jansson)
PKG_CHECK_MODULES(ORCANIA, liborcania)
AC_ARG_ENABLE(sanitize,
[AS_HELP_STRING(

View File

@ -1,6 +1,7 @@
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src
AM_CFLAGS=-Wall -g $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) \
$(LIBOSMONETIF_CFLAGS) $(ULFIUS_CFLAGS) $(JANSSON_CFLAGS) \
$(LIBOSMONETIF_CFLAGS) \
$(ULFIUS_CFLAGS) $(JANSSON_CFLAGS) $(ORCANIA_CFLAGS) \
$(COVERAGE_CFLAGS)
AM_LDFLAGS=$(COVERAGE_LDFLAGS)
@ -11,5 +12,6 @@ bin_PROGRAMS = osmo-cbc
osmo_cbc_SOURCES = cbc_main.c cbc_data.c cbc_vty.c cbsp_server.c cbsp_server_fsm.c \
rest_api.c charset.c
osmo_cbc_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \
$(LIBOSMONETIF_LIBS) $(ULFIUS_LIBS) $(JANSSON_LIBS)
$(LIBOSMONETIF_LIBS) \
$(ULFIUS_LIBS) $(JANSSON_LIBS) $(ORCANIA_LIBS)

View File

@ -154,9 +154,11 @@ extern int cbc_client_rx_cb(struct osmo_cbsp_cbc_client *client, struct osmo_cbs
int main(int argc, char **argv)
{
void *tall_rest_ctx;
int rc;
tall_cbc_ctx = talloc_named_const(NULL, 1, "osmo-cbc");
tall_rest_ctx = talloc_named_const(tall_cbc_ctx, 0, "REST");
msgb_talloc_ctx_init(tall_cbc_ctx, 0);
osmo_init_logging2(tall_cbc_ctx, &log_info);
osmo_stats_init(tall_cbc_ctx);
@ -188,6 +190,8 @@ int main(int argc, char **argv)
cbsp_cbc_create(tall_cbc_ctx, NULL, -1, &cbc_client_rx_cb);
rest_api_init(tall_rest_ctx, 12345);
signal(SIGUSR1, &signal_handler);
signal(SIGUSR2, &signal_handler);
osmo_init_ignore_signals();

View File

@ -20,7 +20,7 @@ enum cbsp_server_event {
/* rest_api.c */
int rest_api_init(uint16_t port);
int rest_api_init(void *ctx, uint16_t port);
void rest_api_fin(void);
/* cbc_vty.c */

View File

@ -23,9 +23,11 @@
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <pthread.h>
#include <jansson.h>
#include <ulfius.h>
#include <orcania.h>
#include <osmocom/core/utils.h>
#include <osmocom/core/linuxlist.h>
@ -371,13 +373,44 @@ static const struct _u_endpoint api_endpoints[] = {
};
static struct _u_instance g_instance;
static void *g_tall_rest;
static pthread_mutex_t g_tall_rest_lock = PTHREAD_MUTEX_INITIALIZER;
int rest_api_init(uint16_t port)
static void *my_o_malloc(size_t sz)
{
void *obj;
pthread_mutex_lock(&g_tall_rest_lock);
obj = talloc_size(g_tall_rest, sz);
pthread_mutex_unlock(&g_tall_rest_lock);
return obj;
}
static void *my_o_realloc(void *obj, size_t sz)
{
void *ret;
pthread_mutex_lock(&g_tall_rest_lock);
ret = talloc_realloc_size(g_tall_rest, obj, sz);
pthread_mutex_unlock(&g_tall_rest_lock);
return ret;
}
static void my_o_free(void *obj)
{
pthread_mutex_lock(&g_tall_rest_lock);
talloc_free(obj);
pthread_mutex_unlock(&g_tall_rest_lock);
}
int rest_api_init(void *ctx, uint16_t port)
{
int i;
g_tall_rest = ctx;
o_set_alloc_funcs(my_o_malloc, my_o_realloc, my_o_free);
if (ulfius_init_instance(&g_instance, port, NULL, NULL) != U_OK)
return -1;
g_instance.mhd_response_copy_data = 1;
for (i = 0; i < ARRAY_SIZE(api_endpoints); i++)
ulfius_add_endpoint(&g_instance, &api_endpoints[i]);