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
This commit is contained in:
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user