Uploaded image for project: 'vpp'
  1. vpp
  2. VPP-1113

SR MPLS path.frp_label_stack

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Highest Highest
    • 18.04
    • None
    • SR

      Hi Xyxue,
       
      Each call to fib_table_entry_path_add2 expects that it will own the label stack that is passed to it. This was done so there is no need to copy the stack. If an application (like SR) wants to use the same set of labels for more than one prefix, it should allocate/duplicate the label stack. Or if that application wants to keep a copy of the label stack, it must pass FIB a copy.
       
      Regards,
      neale
       
       
      From: <vpp-dev-bounces@lists.fd.io> on behalf of 薛欣颖 <xyxue@fiberhome.com>
      Date: Thursday, 21 December 2017 at 13:15
      To: "vpp-dev@lists.fd.io" <vpp-dev@lists.fd.io>
      Subject: [vpp-dev] the mheap small cache release more than once
       
       
      Hi guys,
       
      I'm testing the sr mpls, and there is a small cache release more than once.  How should we avoid this ? My debug info is shown below:
       
      create_sl (mpls_sr_policy_t  sr_policy, mpls_label_t  sl, u32 weight)
      {
        mpls_sr_main_t *sm = &sr_mpls_main;
        mpls_sr_sl_t *segment_list;
       
        pool_get (sm->sid_lists, segment_list);
        memset (segment_list, 0, sizeof (*segment_list));
       
        vec_add1 (sr_policy->segments_lists, segment_list  sm>sid_lists);
       
        / Fill in segment list /
        segment_list->weight =
          (weight != (u32) ~ 0 ? weight : SR_SEGMENT_LIST_WEIGHT_DEFAULT);
        segment_list->segments = vec_dup (sl);
       
        fib_route_path_t path = {
          .frp_proto = DPO_PROTO_MPLS,
          .frp_sw_if_index = ~0,
          .frp_fib_index = 0,
          .frp_weight = segment_list->weight,
          .frp_flags = FIB_ROUTE_PATH_FLAG_NONE,
          .frp_label_stack = NULL,
          .frp_local_label = sl[0],
        };
       
        vec_add (path.frp_label_stack, sl + 1, vec_len (sl) - 1);
       
        fib_route_path_t *paths = NULL;
        vec_add1 (paths, path);
       
        mpls_eos_bit_t eos;
        FOR_EACH_MPLS_EOS_BIT (eos)
        {
      /* INDENT-OFF */
      fib_prefix_t
      pfx = {
      .fp_len = 21,
      .fp_proto = FIB_PROTOCOL_MPLS,
      .fp_label = sr_policy->bsid,
      .fp_eos = eos,
      .fp_payload_proto = DPO_PROTO_MPLS,
      };
      /* INDENT-ON */
       
          fib_table_entry_path_add2 (0,
             &pfx,
             FIB_SOURCE_SR,
             (sr_policy->type == SR_POLICY_TYPE_DEFAULT ?
      FIB_ENTRY_FLAG_NONE :
      FIB_ENTRY_FLAG_MULTICAST), paths);
        }
       
        vec_free (paths);
       
        return segment_list;
      }
       
       
      In this function,path.frp_label_stack alloc only one memory, but be used many times with 'fib_table_entry_path_add2 '. When we delete ,'fib_path_ext_list_remove ' would bw call many times, then  repeated memory release,and can't be detected.
       
      void
      fib_path_ext_list_remove (fib_path_ext_list_t *list,
                                fib_path_ext_type_t ext_type,
                                const fib_route_path_t *rpath)
      {
          fib_path_ext_t *path_ext;
       
          path_ext = fib_path_ext_list_find(list, ext_type, rpath);
       
          if (NULL != path_ext)
          {
              /*
               * delete the element moving the remaining elements down 1 position.
               * this preserves the sorted order.
               */
              vec_free(path_ext->fpe_label_stack);
              vec_delete(list->fpel_exts, 1, (path_ext  list>fpel_exts));
          }
      }
      Actual operation situation:
      DBGvpp# sr mpls policy add bsid 999 next 202 next 203 next 204 
       
      Thread 1 "vpp_main" hit Breakpoint 2, create_sl (sr_policy=0x7fffb5e47264, sl=0x7fffb5589064, weight=4294967295)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:64
      64      {
      (gdb) n
      65        mpls_sr_main_t *sm = &sr_mpls_main;
      (gdb) 
      68        pool_get (sm->sid_lists, segment_list);
      (gdb) 
      69        memset (segment_list, 0, sizeof (*segment_list));
      (gdb) 
      71        vec_add1 (sr_policy->segments_lists, segment_list  sm>sid_lists);
      (gdb) 
      75          (weight != (u32) ~ 0 ? weight : SR_SEGMENT_LIST_WEIGHT_DEFAULT);
      (gdb) 
      74        segment_list->weight =
      (gdb) 
      76        segment_list->segments = vec_dup (sl);
      (gdb) 
      78        fib_route_path_t path = {
      (gdb) 
      85          .frp_local_label = sl[0],
      (gdb) 
      78        fib_route_path_t path = {
      (gdb) 
      82          .frp_weight = segment_list->weight,
      (gdb) 
      78        fib_route_path_t path = {
      (gdb) 
      88        vec_add (path.frp_label_stack, sl + 1, vec_len (sl) - 1);
      (gdb) 
      90        fib_route_path_t *paths = NULL;
      (gdb) set pr pr
      (gdb) p paths
      $1 = (fib_route_path_t *) 0x0
      (gdb) n
      91        vec_add1 (paths, path);
      (gdb) n
      94        FOR_EACH_MPLS_EOS_BIT (eos)
      (gdb) p *paths
      $2 = {
        frp_proto = DPO_PROTO_MPLS, 
        {
          {
            {
              frp_addr = {
                {
                  pad = {202, 0, 0}, 
                  ip4 = {
                    data = "\000\000\000", 
                    data_u32 = 0, 
                    as_u8 = "\000\000\000", 
                    as_u16 = {0, 0}, 
                    as_u32 = 0
                  }
                }, 
                ip6 = {
                  as_u8 = "\312", '\000' <repeats 14 times>, 
                  as_u16 = {202, 0, 0, 0, 0, 0, 0, 0}, 
                  as_u32 = {202, 0, 0, 0}, 
                  as_u64 = {202, 0}, 
                  as_uword = {202, 0}
                }, 
                as_u8 = "\312", '\000' <repeats 14 times>, 
                as_u64 = {202, 0}
              }, 
              {
                frp_local_label = 202, 
                frp_eos = MPLS_NON_EOS
              }
            }, 
            {
              frp_sw_if_index = 4294967295, 
              frp_rpf_id = 4294967295
            }, 
            {
      --Type <return> to continue, or q <return> to quit--
              frp_fib_index = 0, 
              frp_bier_fib_index = 0
            }, 
            frp_label_stack = 0x7fffb5665c84
          }, 
          frp_bier_tbl = {
            bti_set = 202, 
            bti_sub_domain = 0, 
            bti_ecmp = 0, 
            bti_hdr_len = BIER_HDR_LEN_64, 
            bti_type = BIER_TABLE_MPLS_SPF
          }, 
          frp_bier_imp = 202, 
          frp_udp_encap_id = 202, 
          frp_bier_fmask = 202
        }, 
        frp_weight = 1 '\001', 
        frp_preference = 0 '\000', 
        frp_flags = FIB_ROUTE_PATH_FLAG_NONE
      }
       
       
      DBGvpp# sr mpls policy del bsid 999 next 202 next 203 next 204 
       
      Thread 1 "vpp_main" hit Breakpoint 1, fib_path_ext_list_remove (list=0x7fffb5e4c658, ext_type=FIB_PATH_EXT_MPLS, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_path_ext.c:394
      394     {
      (gdb) n
      397         path_ext = fib_path_ext_list_find(list, ext_type, rpath);
      (gdb) 
      399         if (NULL != path_ext)
      (gdb) 
      405             vec_free(path_ext->fpe_label_stack);
      (gdb) p path_ext->fpe_label_stack
      There is no member named fpe_label_stack.
      (gdb) p *path_ext
      $4 = {
        fpe_path = {
          frp_proto = DPO_PROTO_MPLS, 
          {
            {
              {
                frp_addr = {
                  {
                    pad = {202, 0, 0}, 
                    ip4 = {
                      data = "\000\000\000", 
                      data_u32 = 0, 
                      as_u8 = "\000\000\000", 
                      as_u16 = {0, 0}, 
                      as_u32 = 0
                    }
                  }, 
                  ip6 = {
                    as_u8 = "\312", '\000' <repeats 14 times>, 
                    as_u16 = {202, 0, 0, 0, 0, 0, 0, 0}, 
                    as_u32 = {202, 0, 0, 0}, 
                    as_u64 = {202, 0}, 
                    as_uword = {202, 0}
                  }, 
                  as_u8 = "\312", '\000' <repeats 14 times>, 
                  as_u64 = {202, 0}
                }, 
                {
                  frp_local_label = 202, 
                  frp_eos = MPLS_NON_EOS
                }
              }, 
              {
                frp_sw_if_index = 4294967295, 
                frp_rpf_id = 4294967295
              }, 
      --Type <return> to continue, or q <return> to quit-- 
              {
                frp_fib_index = 0, 
                frp_bier_fib_index = 0
              }, 
              frp_label_stack = 0x7fffb5665c84
            }, 
            frp_bier_tbl = {
              bti_set = 202, 
              bti_sub_domain = 0, 
              bti_ecmp = 0, 
              bti_hdr_len = BIER_HDR_LEN_64, 
              bti_type = BIER_TABLE_MPLS_SPF
            }, 
            frp_bier_imp = 202, 
            frp_udp_encap_id = 202, 
            frp_bier_fmask = 202
          }, 
          frp_weight = 1 '\001', 
          frp_preference = 0 '\000', 
          frp_flags = FIB_ROUTE_PATH_FLAG_NONE
        }, 
        {
          fpe_adj_flags = FIB_PATH_EXT_ADJ_FLAG_NONE
        }, 
        fpe_type = FIB_PATH_EXT_MPLS, 
        fpe_path_index = 17
      }
      (gdb) b mheap_put
      Breakpoint 3 at 0x7ffff6845bc0: file /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c, line 756.
      (gdb) c
      Continuing.
       
      Thread 1 "vpp_main" hit Breakpoint 3, mheap_put (v=0x7fffb5476000, uoffset=2030720)                    //first release
          at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c:756
      756     {
      (gdb) bt
      #0  mheap_put (v=0x7fffb5476000, uoffset=2030720) at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c:756
      #1  0x00007ffff73be5dd in clib_mem_free (p=0x7fffb5665c80) at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mem.h:186
      #2  0x00007ffff73bf57e in fib_path_ext_list_remove (list=0x7fffb5e4c658, ext_type=FIB_PATH_EXT_MPLS, rpath=0x7fffb5e471ac)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_path_ext.c:405
      #3  0x00007ffff73a59ae in fib_entry_src_api_path_remove (src=0x7fffb5e4c658, pl_flags=FIB_PATH_LIST_FLAG_NONE, 
          rpaths=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry_src_api.c:121
      #4  0x00007ffff73a2e19 in fib_entry_src_action_path_remove (fib_entry=0x7fffb5e46f98, source=FIB_SOURCE_SR, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry_src.c:1241
      #5  0x00007ffff739e9c5 in fib_entry_path_remove (fib_entry_index=13, source=FIB_SOURCE_SR, rpath=0x7fffb5e471ac)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry.c:918
      #6  0x00007ffff738a0d5 in fib_table_entry_path_remove2 (fib_index=0, prefix=0x7fffb5e629d0, source=FIB_SOURCE_SR, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_table.c:635
      #7  0x00007ffff7193824 in sr_mpls_policy_del (bsid=999)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:233
      #8  0x00007ffff71953c4 in sr_mpls_policy_command_fn (vm=0x7ffff7b89480 <vlib_global_main>, input=0x7fffb5e62ef0, 
          cmd=0x7fffb5e32db8) at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:493
      #9  0x00007ffff78b30ed in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=137)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:588
      #10 0x00007ffff78b2ffb in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=138)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:566
      #11 0x00007ffff78b2ffb in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:566
      #12 0x00007ffff78b33d2 in vlib_cli_input (vm=0x7ffff7b89480 <vlib_global_main>, input=0x7fffb5e62ef0, 
          function=0x7ffff794289b <unix_vlib_cli_output>, function_arg=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:662
      #13 0x00007ffff7948059 in unix_cli_process_input (cm=0x7ffff7b892e0 <unix_cli_main>, cli_file_index=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/unix/cli.c:2308
      #14 0x00007ffff7948bb7 in unix_cli_process (vm=0x7ffff7b89480 <vlib_global_main>, rt=0x7fffb5e52000, f=0x0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/unix/cli.c:2420
      #15 0x00007ffff78e7537 in vlib_process_bootstrap (_a=140736238934640)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/main.c:1231
      #16 0x00007ffff682cdc4 in clib_calljmp () at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/longjmp.S:110
      #17 0x00007fffb5875a40 in ?? ()
      --Type <return> to continue, or q <return> to quit--
      #18 0x00007ffff78e7662 in vlib_process_startup (vm=0x7ffff688012e <vec_aligned_header_bytes+54>, p=0x7fffb5875a80, 
          f=0x6068e5e444211f00) at /home/git_pull_vpp/vpp/build-data/../src/vlib/main.c:1253
      Backtrace stopped: previous frame inner to this frame (corrupt stack?)
      (gdb) n
      763       cpu_times[0] = clib_cpu_time_now ();
      (gdb) 
      765       h = mheap_header (v);
      (gdb) 
      767       mheap_maybe_lock (v);
      (gdb) 
      769       if (h->flags & MHEAP_FLAG_VALIDATE)
      (gdb) 
      772       ASSERT (h->n_elts > 0);
      (gdb) 
      773       h->n_elts--;
      (gdb) 
      774       h->stats.n_puts += 1;
      (gdb) 
      776       e = mheap_elt_at_uoffset (v, uoffset);
      (gdb) 
      777       n = mheap_next_elt (e);
      (gdb) 
      778       n_user_data_bytes = mheap_elt_data_bytes (e);
      (gdb) 
      780       trace_uoffset = uoffset;
      (gdb) 
      781       trace_n_user_data_bytes = n_user_data_bytes;
      (gdb) 
      783       bin = user_data_size_to_bin_index (n_user_data_bytes);
      (gdb) 
      784       if (MHEAP_HAVE_SMALL_OBJECT_CACHE
      (gdb) p bin
      $5 = 1
      (gdb) n
      785           && bin < 255 && (h->flags & MHEAP_FLAG_SMALL_OBJECT_CACHE))
      (gdb) 
      787           uoffset = mheap_put_small_object (h, bin, uoffset);
      (gdb) 
      788           if (uoffset == 0)
      (gdb) p uoffset 
      $6 = 0
      (gdb) info b
      Num     Type           Disp Enb Address            What
      1       breakpoint     keep y   0x00007ffff73bf521 in fib_path_ext_list_remove 
                                                         at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_path_ext.c:394
              breakpoint already hit 1 time
      2       breakpoint     keep y   <MULTIPLE>         
              breakpoint already hit 1 time
      2.1                         y     0x00007ffff716a51c in create_sl 
                                                         at /home/git_pull_vpp/vpp/build-data/../src/vnet/srv6/sr_policy_rewrite.c:295
      2.2                         y     0x00007ffff71928ea in create_sl 
                                                         at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:64
      3       breakpoint     keep y   0x00007ffff6845bc0 in mheap_put 
                                                         at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c:756
              breakpoint already hit 1 time
      (gdb) d 3
      (gdb) b mheap_put if (uoffset == 2030720)
      Breakpoint 4 at 0x7ffff6845bc0: file /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c, line 756.
      (gdb) c
      Continuing.
       
      Thread 1 "vpp_main" hit Breakpoint 1, fib_path_ext_list_remove (list=0x7fffb5e466d4, ext_type=FIB_PATH_EXT_MPLS, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_path_ext.c:394
      394     {
      (gdb) n
      397         path_ext = fib_path_ext_list_find(list, ext_type, rpath);
      (gdb) 
      399         if (NULL != path_ext)
      (gdb) p *path_e
      path_elem  path_ext   
      (gdb) p *path_ext
      $7 = {
        fpe_path = {
          frp_proto = DPO_PROTO_MPLS, 
          {
            {
              {
                frp_addr = {
                  {
                    pad = {202, 0, 0}, 
                    ip4 = {
                      data = "\000\000\000", 
                      data_u32 = 0, 
                      as_u8 = "\000\000\000", 
                      as_u16 = {0, 0}, 
                      as_u32 = 0
                    }
                  }, 
                  ip6 = {
                    as_u8 = "\312", '\000' <repeats 14 times>, 
                    as_u16 = {202, 0, 0, 0, 0, 0, 0, 0}, 
                    as_u32 = {202, 0, 0, 0}, 
                    as_u64 = {202, 0}, 
                    as_uword = {202, 0}
                  }, 
                  as_u8 = "\312", '\000' <repeats 14 times>, 
                  as_u64 = {202, 0}
                }, 
                {
                  frp_local_label = 202, 
                  frp_eos = MPLS_NON_EOS
                }
              }, 
              {
                frp_sw_if_index = 4294967295, 
                frp_rpf_id = 4294967295
              }, 
      --Type <return> to continue, or q <return> to quit-- 
              {
                frp_fib_index = 0, 
                frp_bier_fib_index = 0
              }, 
              frp_label_stack = 0x7fffb5665c84
            }, 
            frp_bier_tbl = {
              bti_set = 202, 
              bti_sub_domain = 0, 
              bti_ecmp = 0, 
              bti_hdr_len = BIER_HDR_LEN_64, 
              bti_type = BIER_TABLE_MPLS_SPF
            }, 
            frp_bier_imp = 202, 
            frp_udp_encap_id = 202, 
            frp_bier_fmask = 202
          }, 
          frp_weight = 1 '\001', 
          frp_preference = 0 '\000', 
          frp_flags = FIB_ROUTE_PATH_FLAG_NONE
        }, 
        {
          fpe_adj_flags = FIB_PATH_EXT_ADJ_FLAG_NONE
        }, 
        fpe_type = FIB_PATH_EXT_MPLS, 
        fpe_path_index = 17
      }
      (gdb) c
      Continuing.
       
       
      Thread 1 "vpp_main" hit Breakpoint 4, mheap_put (v=0x7fffb5476000, uoffset=2030720)
          at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c:756
      756     {
      (gdb) bt
      #0  mheap_put (v=0x7fffb5476000, uoffset=2030720) at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mheap.c:756  //second release
      #1  0x00007ffff73be5dd in clib_mem_free (p=0x7fffb5665c80) at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/mem.h:186
      #2  0x00007ffff73bf57e in fib_path_ext_list_remove (list=0x7fffb5e466d4, ext_type=FIB_PATH_EXT_MPLS, rpath=0x7fffb5e471ac)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_path_ext.c:405
      #3  0x00007ffff73a59ae in fib_entry_src_api_path_remove (src=0x7fffb5e466d4, pl_flags=FIB_PATH_LIST_FLAG_NONE, 
          rpaths=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry_src_api.c:121
      #4  0x00007ffff73a2e19 in fib_entry_src_action_path_remove (fib_entry=0x7fffb5e47028, source=FIB_SOURCE_SR, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry_src.c:1241
      #5  0x00007ffff739e9c5 in fib_entry_path_remove (fib_entry_index=15, source=FIB_SOURCE_SR, rpath=0x7fffb5e471ac)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_entry.c:918
      #6  0x00007ffff738a0d5 in fib_table_entry_path_remove2 (fib_index=0, prefix=0x7fffb5e629d0, source=FIB_SOURCE_SR, 
          rpath=0x7fffb5e471ac) at /home/git_pull_vpp/vpp/build-data/../src/vnet/fib/fib_table.c:635
      #7  0x00007ffff7193824 in sr_mpls_policy_del (bsid=999)
          at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:233
      #8  0x00007ffff71953c4 in sr_mpls_policy_command_fn (vm=0x7ffff7b89480 <vlib_global_main>, input=0x7fffb5e62ef0, 
          cmd=0x7fffb5e32db8) at /home/git_pull_vpp/vpp/build-data/../src/vnet/srmpls/sr_mpls_policy.c:493
      #9  0x00007ffff78b30ed in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=137)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:588
      #10 0x00007ffff78b2ffb in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=138)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:566
      #11 0x00007ffff78b2ffb in vlib_cli_dispatch_sub_commands (vm=0x7ffff7b89480 <vlib_global_main>, 
          cm=0x7ffff7b89660 <vlib_global_main+480>, input=0x7fffb5e62ef0, parent_command_index=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:566
      #12 0x00007ffff78b33d2 in vlib_cli_input (vm=0x7ffff7b89480 <vlib_global_main>, input=0x7fffb5e62ef0, 
          function=0x7ffff794289b <unix_vlib_cli_output>, function_arg=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/cli.c:662
      #13 0x00007ffff7948059 in unix_cli_process_input (cm=0x7ffff7b892e0 <unix_cli_main>, cli_file_index=0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/unix/cli.c:2308
      #14 0x00007ffff7948bb7 in unix_cli_process (vm=0x7ffff7b89480 <vlib_global_main>, rt=0x7fffb5e52000, f=0x0)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/unix/cli.c:2420
      #15 0x00007ffff78e7537 in vlib_process_bootstrap (_a=140736238934640)
          at /home/git_pull_vpp/vpp/build-data/../src/vlib/main.c:1231
      #16 0x00007ffff682cdc4 in clib_calljmp () at /home/git_pull_vpp/vpp/build-data/../src/vppinfra/longjmp.S:110
      #17 0x00007fffb5875a40 in ?? ()
      --Type <return> to continue, or q <return> to quit--
      #18 0x00007ffff78e7662 in vlib_process_startup (vm=0x7ffff688012e <vec_aligned_header_bytes+54>, p=0x7fffb5875a80, 
          f=0x6068e5e444211f00) at /home/git_pull_vpp/vpp/build-data/../src/vlib/main.c:1253
      Backtrace stopped: previous frame inner to this frame (corrupt stack?)
       
       
      Through the following debug functions, print the small memory cache, We can see that the same offset has been stored 2 times , It is also  verified that the memory is repeatedly released.
      void mheap_small_cache(void *v)
      {
          mheap_t *h = mheap_header (v);
          uword i = 0;
          
      #define CHECK if (! ) { mheap_validate_breakpoint (); os_panic (); }
       
          for (i = 0; i < ARRAY_LEN (h->small_object_cache.bins.as_u8); i++)
            {
              if (h->small_object_cache.bins.as_u8[i] != 0)
            {
              mheap_elt_t *e;
              uword b = h->small_object_cache.bins.as_u8[i] - 1;
              uword o = h->small_object_cache.offsets[i];
              uword s;
          
              e = mheap_elt_at_uoffset (v, o);  
              s = mheap_elt_data_bytes (e);
       
              printf ("i = %8d, bin =%8d, offset = %8d, data_len = %8d, ptr = %p.\n",
                  (int)i, (int)b, (int)o, (int)s, e);
       
            }
            }
       
      }
       
       
      /*
       * fd.io coding-style-patch-verification: ON
       
       
      (gdb) call mheap_small_cache (clib_mem_get_heap ())
      i =        0, bin =       5, offset = 10059896, data_len =       28, ptr = 0x7fffb5e0e070.
      i =        1, bin =       5, offset = 10294812, data_len =       28, ptr = 0x7fffb5e47614.
      i =        2, bin =       7, offset = 10295924, data_len =       36, ptr = 0x7fffb5e47a6c.
      i =        3, bin =       3, offset =  9642216, data_len =       20, ptr = 0x7fffb5da80e0.
      i =        4, bin =       3, offset = 10196536, data_len =       20, ptr = 0x7fffb5e2f630.
      i =        5, bin =       1, offset =  2030720, data_len =       12, ptr = 0x7fffb55da6f0.
      i =        6, bin =       3, offset =  1493816, data_len =       20, ptr = 0x7fffb55e2b30.
      i =        7, bin =       3, offset = 10175184, data_len =       20, ptr = 0x7fffb5e2a2c8.
      i =        8, bin =       3, offset =  1953400, data_len =       20, ptr = 0x7fffb5652e70.
      i =        9, bin =       3, offset =  9589896, data_len =       20, ptr = 0x7fffb5d9b480.
      i =       10, bin =       3, offset =  1576400, data_len =       20, ptr = 0x7fffb55f6dc8.
      i =       11, bin =      51, offset =    78000, data_len =      212, ptr = 0x7fffb54890a8.
      i =       12, bin =       1, offset = 10027684, data_len =       12, ptr = 0x7fffb5e0629c.
      i =       13, bin =       3, offset =  1126496, data_len =       20, ptr = 0x7fffb5589058.
      i =       14, bin =       9, offset = 10079012, data_len =       44, ptr = 0x7fffb5e12b1c.
      i =       15, bin =       5, offset =    46380, data_len =       28, ptr = 0x7fffb5481524.
      i =       16, bin =       2, offset = 10050652, data_len =       16, ptr = 0x7fffb5e0bc54.
      i =       17, bin =       1, offset =  9607132, data_len =       12, ptr = 0x7fffb5d9f7d4.
      i =       18, bin =      12, offset = 10294940, data_len =       56, ptr = 0x7fffb5e47694.
      i =       19, bin =      22, offset = 10314828, data_len =       96, ptr = 0x7fffb5e4c444.
      i =       20, bin =       3, offset =  2024832, data_len =       20, ptr = 0x7fffb5664578.
      i =       21, bin =      91, offset =    77620, data_len =      372, ptr = 0x7fffb5488f2c.
      i =       22, bin =       3, offset =  1518016, data_len =       20, ptr = 0x7fffb55e89b8.
      i =       23, bin =      10, offset = 10315032, data_len =       48, ptr = 0x7fffb5e4c510.
      i =       24, bin =      10, offset = 10315088, data_len =       48, ptr = 0x7fffb5e4c548.
      i =       25, bin =      10, offset = 10315144, data_len =       48, ptr = 0x7fffb5e4c580.
      i =       26, bin =      10, offset = 10315200, data_len =       48, ptr = 0x7fffb5e4c5b8.
      i =       27, bin =      57, offset =    91480, data_len =      236, ptr = 0x7fffb548c550.
      i =       28, bin =       2, offset = 14680072, data_len =       16, ptr = 0x7fffb6276000.
      i =       29, bin =       3, offset = 10082776, data_len =       20, ptr = 0x7fffb5e139d0.
      i =       30, bin =       1, offset =  1769376, data_len =       12, ptr = 0x7fffb5625f98.
      i =       31, bin =       2, offset = 10289660, data_len =       16, ptr = 0x7fffb5e461f4.
      i =       32, bin =       2, offset = 10289636, data_len =       16, ptr = 0x7fffb5e461dc.
      i =       33, bin =      14, offset = 10317452, data_len =       64, ptr = 0x7fffb5e4ce84.
      i =       34, bin =       7, offset = 10317552, data_len =       36, ptr = 0x7fffb5e4cee8.
      i =       35, bin =       1, offset =  2030720, data_len =       12, ptr = 0x7fffb55da6f0.
      i =       36, bin =       3, offset = 10074264, data_len =       20, ptr = 0x7fffb5e11890.
       
       
      Thanks,
      Xyxue

            pcamaril Pablo Camarillo
            pcamaril Pablo Camarillo
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:

                Estimated:
                Original Estimate - 1 day
                1d
                Remaining:
                Remaining Estimate - 1 day
                1d
                Logged:
                Time Spent - Not Specified
                Not Specified