summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOle Troan <ot@cisco.com>2020-09-28 16:15:18 +0200
committerDamjan Marion <dmarion@me.com>2020-09-28 16:17:25 +0000
commitf68fccfe7e188fec2c9f91da38ca9acf6f67d811 (patch)
tree7b0110e904980043cb9cc9772eb5fdbb7f7c8d71
parent2c714a0cec9de07816a5397a4a6d69a103378731 (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.c40
-rw-r--r--src/vpp-api/client/vppapiclient.h3
-rw-r--r--src/vpp-api/python/vpp_papi/vpp_transport_shmem.py5
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)