tests: kernel: work_queue: avoid improper access to internal structures

Nothing in the API description the delayed work structure sanctions
direct reference to internal fields.  Do not assume that a delayed
work item can be initialized in any way other than by invoking the
delayed work item init function.  Do not assume that a delayed work
item can be submitted without delay by invoking k_work_submit() with a
reference to the contained work item.

Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
Peter Bigot 2020-11-21 09:02:49 -06:00 committed by Jukka Rissanen
commit fbb7eb81b8

View file

@ -75,7 +75,7 @@ static void delayed_test_items_init(void)
for (i = 0; i < NUM_TEST_ITEMS; i++) { for (i = 0; i < NUM_TEST_ITEMS; i++) {
delayed_tests[i].key = i + 1; delayed_tests[i].key = i + 1;
k_work_init(&delayed_tests[i].work.work, work_handler); k_delayed_work_init(&delayed_tests[i].work, work_handler);
} }
} }
@ -102,7 +102,7 @@ static void coop_work_main(int arg1, int arg2)
for (i = 1; i < NUM_TEST_ITEMS; i += 2) { for (i = 1; i < NUM_TEST_ITEMS; i += 2) {
TC_PRINT(" - Submitting work %d from coop thread\n", i + 1); TC_PRINT(" - Submitting work %d from coop thread\n", i + 1);
k_work_submit(&delayed_tests[i].work.work); k_delayed_work_submit(&delayed_tests[i].work, K_NO_WAIT);
k_msleep(SUBMIT_WAIT); k_msleep(SUBMIT_WAIT);
} }
} }
@ -121,7 +121,7 @@ static void delayed_test_items_submit(void)
for (i = 0; i < NUM_TEST_ITEMS; i += 2) { for (i = 0; i < NUM_TEST_ITEMS; i += 2) {
TC_PRINT(" - Submitting work %d from preempt thread\n", i + 1); TC_PRINT(" - Submitting work %d from preempt thread\n", i + 1);
k_work_submit(&delayed_tests[i].work.work); k_delayed_work_submit(&delayed_tests[i].work, K_NO_WAIT);
k_msleep(SUBMIT_WAIT); k_msleep(SUBMIT_WAIT);
} }
} }
@ -194,10 +194,10 @@ static void test_resubmit(void)
TC_PRINT("Starting resubmit test\n"); TC_PRINT("Starting resubmit test\n");
delayed_tests[0].key = 1; delayed_tests[0].key = 1;
delayed_tests[0].work.work.handler = resubmit_work_handler; k_delayed_work_init(&delayed_tests[0].work, resubmit_work_handler);
TC_PRINT(" - Submitting work\n"); TC_PRINT(" - Submitting work\n");
k_work_submit(&delayed_tests[0].work.work); k_delayed_work_submit(&delayed_tests[0].work, K_NO_WAIT);
TC_PRINT(" - Waiting for work to finish\n"); TC_PRINT(" - Waiting for work to finish\n");
k_msleep(CHECK_WAIT); k_msleep(CHECK_WAIT);