FreeRTOS-Kernel icon indicating copy to clipboard operation
FreeRTOS-Kernel copied to clipboard

[BUG] When configUSE_PREEMPTION=0, removing own task does not switch to another task

Open koichimatsuno opened this issue 1 year ago • 1 comments

Describe the bug

In Windows, if the SuspendThread is called during thread execution, it may deadlock, so I configure configUSE_PREEMPTION=0 and use the taskYIELD.

When removing own task using the vTaskDelete in this environment, a symptom occurs that the task does not switch to another task after the task is removed.

In the vTaskDelete, the taskYIELD_WITHIN_API is called, but is the process of setting xSwitchRequired to TRUE in the xTaskIncrementTick missing?

Target

  • Windows10
  • Visual Studio 2022

Expected behavior

  • After removing own task, another task is executed.
  • Applying the FreeRTOS_v11.1.0.patch to FreeRTOS_v11.1.0 worked as expected.

koichimatsuno avatar Jun 12 '24 09:06 koichimatsuno

Thank you for reaching out and pointing out the bug, I see you are also providing a patch, can you please create a PR against it so that we can go through the formal PR review and you will also get credit for it.

Best Regards, AR

rawalexe avatar Jun 14 '24 22:06 rawalexe

In the vTaskDelete, the taskYIELD_WITHIN_API is called

The problem is that taskYIELD_WITHIN_API does not get called for the Windows port and that is why the next task does not get scheduled.

This PR fixes the issue by recording a yield in the portPRE_TASK_DELETE_HOOK.

Thank you for reporting this.

aggarg avatar Aug 29 '24 13:08 aggarg

I am closing this issue as the PR has been merged. Feel free to reopen if you need anything from us.

aggarg avatar Aug 29 '24 16:08 aggarg