Skip to content

Commit f4a4583

Browse files
Andrew Boieandrewboie
authored andcommitted
tests: sys_sem: add k_thread_join() calls
There is a race condition between the child threads exiting, and the child threads getting re-used in the next scenario. This reproduces more often on SMP systems. Close the race by joining on the child threads before exiting any test scenario. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
1 parent edc5e31 commit f4a4583

File tree

1 file changed

+13
-0
lines changed
  • tests/kernel/mem_protect/sys_sem/src

1 file changed

+13
-0
lines changed

tests/kernel/mem_protect/sys_sem/src/main.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,8 @@ void test_sem_take_timeout(void)
276276
ret_value = sys_sem_take(&simple_sem, SEM_TIMEOUT);
277277
zassert_true(ret_value == 0,
278278
"sys_sem_take failed when its shouldn't have");
279+
280+
k_thread_join(&sem_tid, K_FOREVER);
279281
}
280282

281283
/**
@@ -300,6 +302,8 @@ void test_sem_take_timeout_forever(void)
300302
ret_value = sys_sem_take(&simple_sem, K_FOREVER);
301303
zassert_true(ret_value == 0,
302304
"sys_sem_take failed when its shouldn't have");
305+
306+
k_thread_join(&sem_tid, K_FOREVER);
303307
}
304308

305309
/**
@@ -318,6 +322,8 @@ void test_sem_take_timeout_isr(void)
318322
ret_value = sys_sem_take(&simple_sem, SEM_TIMEOUT);
319323
zassert_true(ret_value == 0,
320324
"sys_sem_take failed when its shouldn't have");
325+
326+
k_thread_join(&sem_tid, K_FOREVER);
321327
}
322328

323329
/**
@@ -418,6 +424,9 @@ void test_sem_take_multiple(void)
418424
zassert_true(signal_count == 1U,
419425
"low priority thread didn't get executed");
420426

427+
k_thread_join(&sem_tid, K_FOREVER);
428+
k_thread_join(&sem_tid_1, K_FOREVER);
429+
k_thread_join(&sem_tid_2, K_FOREVER);
421430
}
422431

423432
/**
@@ -546,6 +555,10 @@ void test_sem_multiple_threads_wait(void)
546555
signal_count);
547556

548557
repeat_count++;
558+
559+
for (int i = 0; i < TOTAL_THREADS_WAITING; i++) {
560+
k_thread_join(&multiple_tid[i], K_FOREVER);
561+
}
549562
} while (repeat_count < 2);
550563
}
551564

0 commit comments

Comments
 (0)