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>
This commit is contained in:
parent
4996604d45
commit
3e369f935c
1 changed files with 7 additions and 0 deletions
|
@ -23,6 +23,7 @@ K_THREAD_STACK_DEFINE(service1_stack, STACK_SIZE);
|
||||||
K_THREAD_STACK_DEFINE(service2_stack, STACK_SIZE);
|
K_THREAD_STACK_DEFINE(service2_stack, STACK_SIZE);
|
||||||
K_THREAD_STACK_DEFINE(client_stack, STACK_SIZE);
|
K_THREAD_STACK_DEFINE(client_stack, STACK_SIZE);
|
||||||
K_SEM_DEFINE(service_sema, 2, 2);
|
K_SEM_DEFINE(service_sema, 2, 2);
|
||||||
|
K_SEM_DEFINE(service_started, 0, 2);
|
||||||
K_SEM_DEFINE(test_continue, 0, 1);
|
K_SEM_DEFINE(test_continue, 0, 1);
|
||||||
struct k_thread service_manager;
|
struct k_thread service_manager;
|
||||||
struct k_thread service1;
|
struct k_thread service1;
|
||||||
|
@ -60,9 +61,11 @@ static void service_manager_entry(void *p1, void *p2, void *p3)
|
||||||
break;
|
break;
|
||||||
case REGISTER_SERVICE1:
|
case REGISTER_SERVICE1:
|
||||||
services[0] = (struct k_msgq *)data[1];
|
services[0] = (struct k_msgq *)data[1];
|
||||||
|
k_sem_give(&service_started);
|
||||||
break;
|
break;
|
||||||
case REGISTER_SERVICE2:
|
case REGISTER_SERVICE2:
|
||||||
services[1] = (struct k_msgq *)data[1];
|
services[1] = (struct k_msgq *)data[1];
|
||||||
|
k_sem_give(&service_started);
|
||||||
break;
|
break;
|
||||||
case SERVICE_QUIT:
|
case SERVICE_QUIT:
|
||||||
for (int i = 0; i < NUM_SERVICES; i++) {
|
for (int i = 0; i < NUM_SERVICES; i++) {
|
||||||
|
@ -184,6 +187,10 @@ static void client_entry(void *p1, void *p2, void *p3)
|
||||||
client_data[0] = QUERRY_SERVICE;
|
client_data[0] = QUERRY_SERVICE;
|
||||||
client_data[1] = (unsigned long)&client_msgq;
|
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 */
|
/* query services */
|
||||||
k_msgq_put(&manager_q, client_data, K_NO_WAIT);
|
k_msgq_put(&manager_q, client_data, K_NO_WAIT);
|
||||||
ret = k_msgq_get(&client_msgq, service_data, K_FOREVER);
|
ret = k_msgq_get(&client_msgq, service_data, K_FOREVER);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue