track libulfius memory allocations using talloc
Change-Id: I9be666e5fac0caf6f7d07c01f39e0f409c7465db
This commit is contained in:
parent
0b9fd3945a
commit
fdb29d94e3
|
@ -35,6 +35,7 @@ PKG_CHECK_MODULES(LIBOSMOGSM, libosmogsm >= 1.0.0)
|
||||||
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.4.0)
|
PKG_CHECK_MODULES(LIBOSMONETIF, libosmo-netif >= 0.4.0)
|
||||||
PKG_CHECK_MODULES(ULFIUS, libulfius)
|
PKG_CHECK_MODULES(ULFIUS, libulfius)
|
||||||
PKG_CHECK_MODULES(JANSSON, jansson)
|
PKG_CHECK_MODULES(JANSSON, jansson)
|
||||||
|
PKG_CHECK_MODULES(ORCANIA, liborcania)
|
||||||
|
|
||||||
AC_ARG_ENABLE(sanitize,
|
AC_ARG_ENABLE(sanitize,
|
||||||
[AS_HELP_STRING(
|
[AS_HELP_STRING(
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src
|
AM_CPPFLAGS = $(all_includes) -I$(top_srcdir)/src
|
||||||
AM_CFLAGS=-Wall -g $(LIBOSMOCORE_CFLAGS) $(LIBOSMOGSM_CFLAGS) $(LIBOSMOVTY_CFLAGS) \
|
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)
|
$(COVERAGE_CFLAGS)
|
||||||
AM_LDFLAGS=$(COVERAGE_LDFLAGS)
|
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 \
|
osmo_cbc_SOURCES = cbc_main.c cbc_data.c cbc_vty.c cbsp_server.c cbsp_server_fsm.c \
|
||||||
rest_api.c charset.c
|
rest_api.c charset.c
|
||||||
osmo_cbc_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \
|
osmo_cbc_LDADD = $(LIBOSMOCORE_LIBS) $(LIBOSMOGSM_LIBS) $(LIBOSMOVTY_LIBS) \
|
||||||
$(LIBOSMONETIF_LIBS) $(ULFIUS_LIBS) $(JANSSON_LIBS)
|
$(LIBOSMONETIF_LIBS) \
|
||||||
|
$(ULFIUS_LIBS) $(JANSSON_LIBS) $(ORCANIA_LIBS)
|
||||||
|
|
||||||
|
|
|
@ -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)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
void *tall_rest_ctx;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
tall_cbc_ctx = talloc_named_const(NULL, 1, "osmo-cbc");
|
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);
|
msgb_talloc_ctx_init(tall_cbc_ctx, 0);
|
||||||
osmo_init_logging2(tall_cbc_ctx, &log_info);
|
osmo_init_logging2(tall_cbc_ctx, &log_info);
|
||||||
osmo_stats_init(tall_cbc_ctx);
|
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);
|
cbsp_cbc_create(tall_cbc_ctx, NULL, -1, &cbc_client_rx_cb);
|
||||||
|
|
||||||
|
rest_api_init(tall_rest_ctx, 12345);
|
||||||
|
|
||||||
signal(SIGUSR1, &signal_handler);
|
signal(SIGUSR1, &signal_handler);
|
||||||
signal(SIGUSR2, &signal_handler);
|
signal(SIGUSR2, &signal_handler);
|
||||||
osmo_init_ignore_signals();
|
osmo_init_ignore_signals();
|
||||||
|
|
|
@ -20,7 +20,7 @@ enum cbsp_server_event {
|
||||||
|
|
||||||
|
|
||||||
/* rest_api.c */
|
/* rest_api.c */
|
||||||
int rest_api_init(uint16_t port);
|
int rest_api_init(void *ctx, uint16_t port);
|
||||||
void rest_api_fin(void);
|
void rest_api_fin(void);
|
||||||
|
|
||||||
/* cbc_vty.c */
|
/* cbc_vty.c */
|
||||||
|
|
|
@ -23,9 +23,11 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include <jansson.h>
|
#include <jansson.h>
|
||||||
#include <ulfius.h>
|
#include <ulfius.h>
|
||||||
|
#include <orcania.h>
|
||||||
|
|
||||||
#include <osmocom/core/utils.h>
|
#include <osmocom/core/utils.h>
|
||||||
#include <osmocom/core/linuxlist.h>
|
#include <osmocom/core/linuxlist.h>
|
||||||
|
@ -371,13 +373,44 @@ static const struct _u_endpoint api_endpoints[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct _u_instance g_instance;
|
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;
|
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)
|
if (ulfius_init_instance(&g_instance, port, NULL, NULL) != U_OK)
|
||||||
return -1;
|
return -1;
|
||||||
|
g_instance.mhd_response_copy_data = 1;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(api_endpoints); i++)
|
for (i = 0; i < ARRAY_SIZE(api_endpoints); i++)
|
||||||
ulfius_add_endpoint(&g_instance, &api_endpoints[i]);
|
ulfius_add_endpoint(&g_instance, &api_endpoints[i]);
|
||||||
|
|
Loading…
Reference in New Issue