Merge branch 'bugfix/freertos_wcaps_coproc_v5.3' into 'release/v5.3'

fix(freertos): fix a bug in `prvTaskDeleteWithCaps` related to coprocessors (backport v5.3)

See merge request espressif/esp-idf!37154
This commit is contained in:
Jiang Jiang Jian
2025-02-28 11:56:39 +08:00

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2023-2025 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -102,15 +102,18 @@ err:
configASSERT( eRunning != eTaskGetState( xTaskToDelete ) ); configASSERT( eRunning != eTaskGetState( xTaskToDelete ) );
/* We can delete the task and free the memory buffers.
* First, we must call `vTaskDelete` so that the port task delete callback is called.
* On targets that have coprocessors, it may be possible that the stack pointer is modified (restored)
* during this phase, hence, it must be done before getting the statuc buffers out of the task. */
vTaskDelete( xTaskToDelete );
/* Free the memory buffers */
xResult = xTaskGetStaticBuffers( xTaskToDelete, &puxStackBuffer, &pxTaskBuffer ); xResult = xTaskGetStaticBuffers( xTaskToDelete, &puxStackBuffer, &pxTaskBuffer );
configASSERT( xResult == pdTRUE ); configASSERT( xResult == pdTRUE );
configASSERT( puxStackBuffer != NULL ); configASSERT( puxStackBuffer != NULL );
configASSERT( pxTaskBuffer != NULL ); configASSERT( pxTaskBuffer != NULL );
/* We can delete the task and free the memory buffers. */
vTaskDelete( xTaskToDelete );
/* Free the memory buffers */
heap_caps_free( puxStackBuffer ); heap_caps_free( puxStackBuffer );
vPortFree( pxTaskBuffer ); vPortFree( pxTaskBuffer );
} }