kernel: update k_thread_state_str() API
When threads are in more than one state at a time, k_thread_state_str() returns a string that lists each of its states delimited by a '+'. This in turn necessitates a change to the API that includes both a pointer to the buffer to use for the string and the size of the buffer. Signed-off-by: Peter Mitsis <peter.mitsis@intel.com>
This commit is contained in:
parent
fef6e46f01
commit
a30cf39975
6 changed files with 103 additions and 43 deletions
|
@ -103,9 +103,12 @@ void wakeup_src_thread(int id)
|
|||
*/
|
||||
for (int i = 0; i < NUM_THREADS; i++) {
|
||||
k_tid_t th = &worker_threads[i];
|
||||
char buffer[16];
|
||||
const char *str;
|
||||
|
||||
zassert_equal(strcmp(k_thread_state_str(th), "pending"),
|
||||
0, "worker thread %d not pending?", i);
|
||||
str = k_thread_state_str(th, buffer, sizeof(buffer));
|
||||
zassert_not_null(strstr(str, "pending"),
|
||||
"worker thread %d not pending?", i);
|
||||
}
|
||||
|
||||
/* Wake the src worker up */
|
||||
|
|
|
@ -219,32 +219,50 @@ void test_k_thread_foreach_unlocked_null_cb(void)
|
|||
*/
|
||||
void test_k_thread_state_str(void)
|
||||
{
|
||||
char state_str[32];
|
||||
const char *str;
|
||||
k_tid_t tid = &tdata1;
|
||||
|
||||
tid->base.thread_state = 0;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_DUMMY;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "dummy") == 0, NULL);
|
||||
|
||||
str = k_thread_state_str(tid, NULL, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "") == 0, NULL);
|
||||
|
||||
str = k_thread_state_str(tid, state_str, 0);
|
||||
zassert_true(strcmp(str, "") == 0, NULL);
|
||||
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "dummy") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_PENDING;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "pending") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "pending") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_PRESTART;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "prestart") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "prestart") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_DEAD;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "dead") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "dead") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_SUSPENDED;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "suspended") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "suspended") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_ABORTING;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "aborting") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "aborting") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = _THREAD_QUEUED;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "queued") == 0, NULL);
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "queued") == 0, NULL);
|
||||
|
||||
tid->base.thread_state = 0xFF;
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "unknown") == 0, NULL);
|
||||
tid->base.thread_state = _THREAD_PENDING | _THREAD_SUSPENDED;
|
||||
str = k_thread_state_str(tid, state_str, sizeof(state_str));
|
||||
zassert_true(strcmp(str, "pending+suspended") == 0, NULL);
|
||||
}
|
||||
|
|
|
@ -156,20 +156,28 @@ void test_threads_suspend_timeout(void)
|
|||
*/
|
||||
void test_resume_unsuspend_thread(void)
|
||||
{
|
||||
char buffer[32];
|
||||
const char *str;
|
||||
k_tid_t tid = k_thread_create(&tdata, tstack, STACK_SIZE,
|
||||
thread_entry, NULL, NULL, NULL,
|
||||
0, K_USER, K_NO_WAIT);
|
||||
|
||||
|
||||
/* Resume an unsuspend thread will not change the thread state. */
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "queued") == 0, NULL);
|
||||
str = k_thread_state_str(tid, buffer, sizeof(buffer));
|
||||
zassert_true(strcmp(str, "queued") == 0, NULL);
|
||||
k_thread_resume(tid);
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "queued") == 0, NULL);
|
||||
str = k_thread_state_str(tid, buffer, sizeof(buffer));
|
||||
zassert_true(strcmp(str, "queued") == 0, NULL);
|
||||
|
||||
/* suspend created thread */
|
||||
k_thread_suspend(tid);
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "suspended") == 0, NULL);
|
||||
str = k_thread_state_str(tid, buffer, sizeof(buffer));
|
||||
zassert_true(strcmp(str, "suspended") == 0, NULL);
|
||||
|
||||
/* Resume an suspend thread will make it to be next eligible.*/
|
||||
k_thread_resume(tid);
|
||||
zassert_true(strcmp(k_thread_state_str(tid), "queued") == 0, NULL);
|
||||
str = k_thread_state_str(tid, buffer, sizeof(buffer));
|
||||
zassert_true(strcmp(str, "queued") == 0, NULL);
|
||||
k_thread_abort(tid);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue