Merge branch 'fix/freertos_race_cond_in_stream_buffers_v5.0' into 'release/v5.0'

fix(freertos): Fixed SMP race condition in stream_buffers.c (v5.0)

See merge request espressif/esp-idf!34228
This commit is contained in:
Marius Vikhammer 2024-10-22 15:59:55 +08:00
commit 45c893d5c5

View File

@ -885,7 +885,19 @@ size_t xStreamBufferReceive( StreamBufferHandle_t xStreamBuffer,
/* Wait for data to be available. */
traceBLOCKING_ON_STREAM_BUFFER_RECEIVE( xStreamBuffer );
( void ) xTaskNotifyWait( ( uint32_t ) 0, ( uint32_t ) 0, NULL, xTicksToWait );
pxStreamBuffer->xTaskWaitingToReceive = NULL;
/* In SMP mode, the task may have been woken and scheduled on
* another core. Hence, we must clear the xTaskWaitingToReceive
* handle in a critical section. */
#if ( configNUM_CORES > 1 )
taskENTER_CRITICAL();
#endif /* configNUMBER_OF_CORES > 1 */
{
pxStreamBuffer->xTaskWaitingToReceive = NULL;
}
#if ( configNUM_CORES > 1 )
taskEXIT_CRITICAL();
#endif /* configNUMBER_OF_CORES > 1 */
/* Recheck the data available after blocking. */
xBytesAvailable = prvBytesInBuffer( pxStreamBuffer );