[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