interface: fix extra locking on fib/mfib table
[vpp.git] / src / vppinfra / dlmalloc.c
index 13f0dff..36c80b0 100644 (file)
@@ -1249,7 +1249,7 @@ static struct malloc_state _gm_;
 #define disable_expand(M) ((M)->mflags |= USE_NOEXPAND_BIT)
 #define use_trace(M) ((M)->mflags & USE_TRACE_BIT)
 #define enable_trace(M) ((M)->mflags |= USE_TRACE_BIT)
-#define disable_trace(M) ((M)->mflags |= USE_TRACE_BIT)
+#define disable_trace(M) ((M)->mflags &= ~USE_TRACE_BIT)
 
 #define set_lock(M,L)\
  ((M)->mflags = (L)?\
@@ -2493,6 +2493,7 @@ static mchunkptr mmap_resize(mstate m, mchunkptr oldp, size_t nb, int flags) {
 /* -------------------------- mspace management -------------------------- */
 
 /* Initialize top chunk and its size */
+CLIB_NOSANITIZE_ADDR
 static void init_top(mstate m, mchunkptr p, size_t psize) {
   /* Ensure alignment */
   size_t offset = align_offset(chunk2mem(p));
@@ -2537,6 +2538,7 @@ static void reset_on_error(mstate m) {
 #endif /* PROCEED_ON_ERROR */
 
 /* Allocate chunk and prepend remainder with chunk in successor base. */
+CLIB_NOSANITIZE_ADDR
 static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
                            size_t nb) {
   mchunkptr p = align_as_chunk(newbase);
@@ -2579,6 +2581,7 @@ static void* prepend_alloc(mstate m, char* newbase, char* oldbase,
 }
 
 /* Add a segment to hold a new noncontiguous region */
+CLIB_NOSANITIZE_ADDR
 static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
   /* Determine locations and sizes of segment, fenceposts, old top */
   char* old_top = (char*)m->top;
@@ -2634,6 +2637,7 @@ static void add_segment(mstate m, char* tbase, size_t tsize, flag_t mmapped) {
 /* -------------------------- System allocation -------------------------- */
 
 /* Get memory from system using MORECORE or MMAP */
+CLIB_NOSANITIZE_ADDR
 static void* sys_alloc(mstate m, size_t nb) {
   char* tbase = CMFAIL;
   size_t tsize = 0;
@@ -4078,6 +4082,7 @@ int mspace_track_large_chunks(mspace msp, int enable) {
   return ret;
 }
 
+CLIB_NOSANITIZE_ADDR
 size_t destroy_mspace(mspace msp) {
   size_t freed = 0;
   mstate ms = (mstate)msp;
@@ -4113,7 +4118,7 @@ void mspace_get_address_and_size (mspace msp, char **addrp, size_t *sizep)
   *sizep = this_seg->size;
 }
 
-CLIB_NOSANITIZE_ADDR
+CLIB_NOSANITIZE_ADDR __clib_export
 int mspace_is_heap_object (mspace msp, void *p)
 {
   msegment *this_seg;
@@ -4180,7 +4185,7 @@ int mspace_is_traced (mspace msp)
   return 0;
 }
 
-CLIB_NOSANITIZE_ADDR
+CLIB_NOSANITIZE_ADDR __clib_export
 void* mspace_get_aligned (mspace msp,
                           unsigned long n_user_data_bytes,
                           unsigned long align,
@@ -4195,28 +4200,7 @@ void* mspace_get_aligned (mspace msp,
    * the base of the dlmalloc object
    */
   n_user_data_bytes += sizeof(unsigned);
-
-  /*
-   * Alignment requests less than the size of an mmx vector are ignored
-   */
-  if (align < sizeof (uword)) {
-    rv = mspace_malloc (msp, n_user_data_bytes);
-    if (rv == 0)
-        return rv;
-
-    if (use_trace(ms)) {
-      mchunkptr p  = mem2chunk(rv);
-      size_t psize = chunksize(p);
-
-      mheap_get_trace ((unsigned long)rv + sizeof (unsigned), psize);
-    }
-
-    wwp = (unsigned *)rv;
-    *wwp = 0;
-    rv += sizeof (unsigned);
-
-    return rv;
-  }
+  align = align < MALLOC_ALIGNMENT ? MALLOC_ALIGNMENT : align;
 
   /*
    * Alignment requests greater than 4K must be at offset zero,
@@ -4281,7 +4265,7 @@ void* mspace_get_aligned (mspace msp,
   return (void *) searchp;
 }
 
-CLIB_NOSANITIZE_ADDR
+CLIB_NOSANITIZE_ADDR __clib_export
 void mspace_put (mspace msp, void *p_arg)
 {
   char *object_header;
@@ -4331,7 +4315,7 @@ void mspace_put_no_offset (mspace msp, void *p_arg)
   mspace_free (msp, p_arg);
 }
 
-CLIB_NOSANITIZE_ADDR
+CLIB_NOSANITIZE_ADDR __clib_export
 size_t mspace_usable_size_with_delta (const void *p)
 {
   size_t usable_size;