why vTaskSuspendAll used in pvPortMalloc

niekiran wrote on Wednesday, January 25, 2017:

can anybody explain why exactly vTaskSuspendAll() is used in every pvPortMalloc() functions of differnt heap implementations ?


richard_damon wrote on Wednesday, January 25, 2017:

It creates a form of critical section without blocking interrupts for an possibly semi-long and inderterminate time period. My understanding is that RTE felt that malloc took too long to disable interrupts for its duration (so you don’t want to use the critical section macros that disable interrupts), but a semaphore/mutex lock had more overhead then they wanted to use also. vTaskSuspendAll allows interrupt to occur and possibly queue up new tasks to switch to, and that action is delayed until the vTaskResumeAll call. This method is used in FreeRTOS whenever there is the need of a exclusion zone that has to scan a possibly unbounded list (so the time is possibly unbounded) to minimize interrrupt latency.