From f68fccfe7e188fec2c9f91da38ca9acf6f67d811 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Mon, 28 Sep 2020 16:15:18 +0200 Subject: api: remove clib_mem_init from vppapiclient contructor Having the constructor in the vppapiclient library led to conflicts with applications wanting to allocate their own heap. Note: Change of behaviour, applications that do not use a CLIB heap must now call vac_mem_init() before using any functions from vppapiclient. Type: fix Signed-off-by: Ole Troan Change-Id: Ib155a54579ea5a0dbc26cb4b6daca1274e1dfdfa --- src/vpp-api/client/client.c | 40 ++++++++++++++++----------------------- src/vpp-api/client/vppapiclient.h | 3 +++ 2 files changed, 19 insertions(+), 24 deletions(-) (limited to 'src/vpp-api/client') diff --git a/src/vpp-api/client/client.c b/src/vpp-api/client/client.c index 5dcca22694d..0d7b1dcafc8 100644 --- a/src/vpp-api/client/client.c +++ b/src/vpp-api/client/client.c @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include #include #include @@ -78,29 +79,6 @@ u16 read_timeout = 0; bool rx_is_running = false; bool timeout_thread_cancelled = false; -/* Set to true to enable memory tracing */ -bool mem_trace = false; - -__attribute__((constructor)) -static void -vac_client_constructor (void) -{ - clib_mem_init (0, 1 << 30); - if (mem_trace) - clib_mem_trace (1); -} - -__attribute__((destructor)) -static void -vac_client_destructor (void) -{ - if (mem_trace) - fformat(stderr, "TRACE: %s", - format (0, "%U\n", - format_mheap, clib_mem_get_heap (), 1)); -} - - static void init (void) { @@ -308,12 +286,13 @@ vac_msg_table_size(void) int vac_connect (char * name, char * chroot_prefix, vac_callback_t cb, - int rx_qlen) + int rx_qlen) { rx_thread_done = false; int rv = 0; vac_main_t *pm = &vac_main; + assert (clib_mem_get_heap ()); init(); if (chroot_prefix != NULL) vl_set_memory_root_path (chroot_prefix); @@ -575,5 +554,18 @@ vac_msg_table_max_index(void) void vac_set_error_handler (vac_error_callback_t cb) { + assert (clib_mem_get_heap ()); if (cb) clib_error_register_handler (cb, 0); } + +/* + * Required if application doesn't use a VPP heap. + */ +void +vac_mem_init (size_t size) +{ + if (size == 0) + clib_mem_init (0, 1 << 30); // default + else + clib_mem_init (0, size); +} diff --git a/src/vpp-api/client/vppapiclient.h b/src/vpp-api/client/vppapiclient.h index 839ec1f851f..680003e7d4f 100644 --- a/src/vpp-api/client/vppapiclient.h +++ b/src/vpp-api/client/vppapiclient.h @@ -16,6 +16,7 @@ #define included_vppapiclient_h #include +#include typedef void (*vac_callback_t)(unsigned char * data, int len); typedef void (*vac_error_callback_t)(void *, unsigned char *, int); @@ -33,4 +34,6 @@ int vac_msg_table_max_index(void); void vac_rx_suspend (void); void vac_rx_resume (void); void vac_set_error_handler(vac_error_callback_t); +void vac_mem_init (size_t size); + #endif -- cgit 1.2.3-korg