app/test: fix reentrancy autotest
authorOlivier Matz <olivier.matz@6wind.com>
Wed, 6 Apr 2016 13:28:01 +0000 (15:28 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 6 Apr 2016 15:30:51 +0000 (17:30 +0200)
commita7e88f1782653efda27261c2e5e22b7472c20e60
tree763e5d10af4464acb296cc5c18293f522bb1ebce
parent5d7bfb7337e917c8d97b43a75264789b01b6cfce
app/test: fix reentrancy autotest

The previous code in func_reentrancy autotest was doing in parallel
something close to:

  name = "common_name";
  do several times {
      obj = allocate_an_object(name)   // obj = ring, mempool, hash, lpm, ...
      if (obj == NULL && lookup(name) == NULL)
          return TEST_FAIL;
  }

This code is not safe. For instance:

   mempool_create() is called on core 0, it creates a ring. At the same
   time on core 1, mempool_create() is called too and the creation of the
   ring fails (EEXIST). But the mempool lookup can fail on core 1 if
   the mempool is not added in the list by core 0.

This commit fixes the func_reentrancy autotest that now works with all
tested class of objects.

Fixes: 104a92bd02 ("app: add reentrancy tests")

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
app/test/test_func_reentrancy.c