diff options
author | Ole Troan <ot@cisco.com> | 2020-09-28 16:15:18 +0200 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-09-28 16:17:25 +0000 |
commit | f68fccfe7e188fec2c9f91da38ca9acf6f67d811 (patch) | |
tree | 7b0110e904980043cb9cc9772eb5fdbb7f7c8d71 | |
parent | 2c714a0cec9de07816a5397a4a6d69a103378731 (diff) |
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 <ot@cisco.com>
Change-Id: Ib155a54579ea5a0dbc26cb4b6daca1274e1dfdfa
-rw-r--r-- | src/vpp-api/client/client.c | 40 | ||||
-rw-r--r-- | src/vpp-api/client/vppapiclient.h | 3 | ||||
-rw-r--r-- | src/vpp-api/python/vpp_papi/vpp_transport_shmem.py | 5 |
3 files changed, 23 insertions, 25 deletions
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 <assert.h> #include <stdio.h> #include <stdlib.h> #include <stddef.h> @@ -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 <stdint.h> +#include <stdbool.h> 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 diff --git a/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py b/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py index 2563a6e89a8..fbf19e4846f 100644 --- a/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py +++ b/src/vpp-api/python/vpp_papi/vpp_transport_shmem.py @@ -24,7 +24,8 @@ 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); +""") vpp_object = None @@ -67,6 +68,8 @@ class VppTransport(object): global vpp_object vpp_object = parent + vpp_api.vac_mem_init(0); + # Register error handler vpp_api.vac_set_error_handler(vac_error_handler) |