@@ -178,8 +178,6 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
178178
179179 if (task -> state == SOF_TASK_STATE_RUNNING ) {
180180 state = task_run (task );
181- if (state == SOF_TASK_STATE_COMPLETED )
182- task_complete (task );
183181 } else {
184182 state = task -> state ; /* to avoid undefined variable warning */
185183 }
@@ -190,18 +188,20 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
190188 * if not, set the state returned by run procedure
191189 */
192190 if (task -> state == SOF_TASK_STATE_RUNNING ) {
193- task -> state = state ;
191+ if (pdata -> cycles_granted ) {
192+ k_thread_runtime_stats_get (pdata -> thread_id , & rt_stats_thread );
193+ pdata -> cycles_consumed += rt_stats_thread .execution_cycles - pdata -> cycles_ref ;
194+ pdata -> cycles_ref = rt_stats_thread .execution_cycles ;
195+ }
194196 switch (state ) {
195197 case SOF_TASK_STATE_RESCHEDULE :
196198 /* mark to reschedule, schedule time is already calculated */
197199 task -> state = SOF_TASK_STATE_QUEUED ;
200+ break ;
198201 case SOF_TASK_STATE_CANCEL :
202+ task -> state = SOF_TASK_STATE_CANCEL ;
203+ break ;
199204 case SOF_TASK_STATE_COMPLETED :
200- if (pdata -> cycles_granted ) {
201- k_thread_runtime_stats_get (pdata -> thread_id , & rt_stats_thread );
202- pdata -> cycles_consumed += rt_stats_thread .execution_cycles - pdata -> cycles_ref ;
203- pdata -> cycles_ref = rt_stats_thread .execution_cycles ;
204- }
205205 break ;
206206
207207 default :
@@ -212,7 +212,12 @@ static void twb_thread_fn(void *p1, void *p2, void *p3)
212212
213213 scheduler_twb_unlock (lock_key );
214214
215- if (task -> state != SOF_TASK_STATE_RUNNING )
215+ if (state == SOF_TASK_STATE_COMPLETED ) {
216+ task -> state = SOF_TASK_STATE_COMPLETED ;
217+ task_complete (task );
218+ }
219+
220+ if (state != SOF_TASK_STATE_RUNNING )
216221 k_sem_take (& pdata -> sem , K_FOREVER );
217222 };
218223 /* never be here */
0 commit comments