[dpdk-dev] [PATCH] test/service: fix race condition on stopping lcore
Kevin Laatz
kevin.laatz at intel.com
Fri Oct 16 11:08:04 CEST 2020
There is a potential race condition in 'service_attr_get' which will cause
test failures since the service core thread is still running while the
values are being retrieved/reset.
This patch fixes the race condition by waiting for the service core thread
to stop before continuing with the unit test checks.
Signed-off-by: Kevin Laatz <kevin.laatz at intel.com>
---
app/test/test_service_cores.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/app/test/test_service_cores.c b/app/test/test_service_cores.c
index 5d92bea8af..44b6fc3624 100644
--- a/app/test/test_service_cores.c
+++ b/app/test/test_service_cores.c
@@ -119,6 +119,17 @@ unregister_all(void)
return TEST_SUCCESS;
}
+/* Wait until service lcore not active, or for 100x SERVICE_DELAY */
+static void
+wait_slcore_inactive(uint32_t slcore_id)
+{
+ int i;
+
+ for (i = 0; rte_service_lcore_may_be_active(slcore_id) == 1 &&
+ i < 100; i++)
+ rte_delay_ms(SERVICE_DELAY);
+}
+
/* register a single dummy service */
static int
dummy_register(void)
@@ -305,6 +316,8 @@ service_attr_get(void)
rte_service_lcore_stop(slcore_id);
+ wait_slcore_inactive(slcore_id);
+
TEST_ASSERT_EQUAL(0, rte_service_attr_get(id, attr_calls, &attr_value),
"Valid attr_get() call didn't return success");
TEST_ASSERT_EQUAL(1, (attr_value > 0),
@@ -394,11 +407,7 @@ service_lcore_attr_get(void)
TEST_ASSERT_EQUAL(0, rte_service_lcore_stop(slcore_id),
"Failed to stop service lcore");
- /* Wait until service lcore not active, or for 100x SERVICE_DELAY */
- int i;
- for (i = 0; rte_service_lcore_may_be_active(slcore_id) == 1 &&
- i < 100; i++)
- rte_delay_ms(SERVICE_DELAY);
+ wait_slcore_inactive(slcore_id);
TEST_ASSERT_EQUAL(0, rte_service_lcore_may_be_active(slcore_id),
"Service lcore not stopped after waiting.");
--
2.25.1
More information about the dev
mailing list