vlib: allocating buffers on thread-x and freeing them on thread-y causes 34/10334/2
authorSteven <sluong@cisco.com>
Tue, 30 Jan 2018 04:09:09 +0000 (20:09 -0800)
committerDamjan Marion <dmarion.lists@gmail.com>
Wed, 31 Jan 2018 17:43:32 +0000 (17:43 +0000)
commit899a84b302da2c266c1de7fd962965120cf50d60
treec74d3440f3c1347810c1f49108e2059ff4a6a420
parent8269d3dbe70adaae60806d5d84e35f25d23193c5
vlib: allocating buffers on thread-x and freeing them on thread-y causes
a crash on debug image (VPP-1151)

In debug image, there is extra code to validate the buffer when it is
freed. It uses the hash table to lookup the buffer index with spinlock
to prevent contention. However, there is one spinlock for each worker
thread. So allocating the buffer on thread-x and freeing the same buffer
on thread-y causes the validation to fail on thread-y. The fix is to
have only one spinlock, stored in vlib_global_main.

Change-Id: Ic383846cefe84a3e262255afcf82276742f0f62e
Signed-off-by: Steven <sluong@cisco.com>
(cherry picked from commit a7effa1b072463f12305a474f082aeaffb7ada4b)
src/plugins/ixge/ixge.c
src/vlib/buffer.c
src/vlib/buffer_funcs.h
src/vnet/replication.c