tests: msgq_usage: ensure all services started before client query
add semaphores to ensure all services started before client query.
otherwise client query services may fail.
Signed-off-by: Watson Zeng <zhiwei@synopsys.com>
diff --git a/tests/kernel/msgq/msgq_usage/src/main.c b/tests/kernel/msgq/msgq_usage/src/main.c
index 4ba093d..27a4f80 100644
--- a/tests/kernel/msgq/msgq_usage/src/main.c
+++ b/tests/kernel/msgq/msgq_usage/src/main.c
@@ -23,6 +23,7 @@
K_THREAD_STACK_DEFINE(service2_stack, STACK_SIZE);
K_THREAD_STACK_DEFINE(client_stack, STACK_SIZE);
K_SEM_DEFINE(service_sema, 2, 2);
+K_SEM_DEFINE(service_started, 0, 2);
K_SEM_DEFINE(test_continue, 0, 1);
struct k_thread service_manager;
struct k_thread service1;
@@ -60,9 +61,11 @@
break;
case REGISTER_SERVICE1:
services[0] = (struct k_msgq *)data[1];
+ k_sem_give(&service_started);
break;
case REGISTER_SERVICE2:
services[1] = (struct k_msgq *)data[1];
+ k_sem_give(&service_started);
break;
case SERVICE_QUIT:
for (int i = 0; i < NUM_SERVICES; i++) {
@@ -184,6 +187,10 @@
client_data[0] = QUERRY_SERVICE;
client_data[1] = (unsigned long)&client_msgq;
+ /* wait all services started */
+ k_sem_take(&service_started, K_FOREVER);
+ k_sem_take(&service_started, K_FOREVER);
+
/* query services */
k_msgq_put(&manager_q, client_data, K_NO_WAIT);
ret = k_msgq_get(&client_msgq, service_data, K_FOREVER);