timer: add race condition test
authorRobert Sanford <rsanford@akamai.com>
Mon, 27 Jul 2015 22:46:05 +0000 (18:46 -0400)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 3 Aug 2015 10:43:01 +0000 (12:43 +0200)
commit6d2d5e19e0fc323b2cc464c4f374adc6787780fa
treea3e79b3ee95efcb8d7592550cf563a32780fd6f3
parenta91311f45be8ea76e1d5bf33552e89734126582b
timer: add race condition test

Add new timer-manage race-condition test: We wrote a test to confirm
our suspicion that we could crash rte_timer_manage() under the right
circumstances. We repeatedly set several timers to expire at roughly
the same time on the master core. The master lcore just delays and runs
rte_timer_manage() about ten times per second. The slave lcores all
watch the first timer (timer-0) to see when rte_timer_manage() is
running on the master, i.e., timer-0's state is not PENDING.
At this point, each slave attempts to reset a subset of the timers to
a later expiration time. The goal here is to have the slaves moving
most of the timers to a different place in the master's pending-list,
while the master is traversing the same next-pointers (the slaves'
sl_next[0] pointers) and running callback functions. This eventually
results in the master traversing a corrupted linked-list.
In our observations, it results in an infinite loop.

Signed-off-by: Robert Sanford <rsanford@akamai.com>
app/test/Makefile
app/test/test_timer_racecond.c [new file with mode: 0644]