buffer: bug fix vlib_buffer_free_inline 00/17600/3
authorLollita Liu <lollita.liu@ericsson.com>
Thu, 14 Feb 2019 10:02:44 +0000 (05:02 -0500)
committerDamjan Marion <dmarion@me.com>
Thu, 14 Feb 2019 17:16:03 +0000 (17:16 +0000)
buffer_pool_index, in case of buffer_pool_index change,
should free buffers in queue before setting buffer_pool_index again

Change-Id: I846ead947a7b2d940c8fc747976239d608597391
Signed-off-by: Lollita Liu <lollita.liu@ericsson.com>
src/vlib/buffer_funcs.h

index 1600905..ec0c12e 100644 (file)
@@ -767,18 +767,19 @@ vlib_buffer_free_inline (vlib_main_t * vm, u32 * buffers, u32 n_buffers,
 
       if (PREDICT_FALSE (buffer_pool_index != b[0]->buffer_pool_index))
        {
-         buffer_pool_index = b[0]->buffer_pool_index;
-#if defined(CLIB_HAVE_VEC128) && !__aarch64__
-         bpi_vec.buffer_pool_index = buffer_pool_index;
-#endif
-         bp = vlib_get_buffer_pool (vm, buffer_pool_index);
-         vlib_buffer_copy_template (&bt, &bp->buffer_template);
 
          if (n_queue)
            {
              vlib_buffer_pool_put (vm, buffer_pool_index, queue, n_queue);
              n_queue = 0;
            }
+
+         buffer_pool_index = b[0]->buffer_pool_index;
+#if defined(CLIB_HAVE_VEC128) && !__aarch64__
+         bpi_vec.buffer_pool_index = buffer_pool_index;
+#endif
+         bp = vlib_get_buffer_pool (vm, buffer_pool_index);
+         vlib_buffer_copy_template (&bt, &bp->buffer_template);
        }
 
       vlib_buffer_validate (vm, b[0]);