diff --git a/radio/src/FreeRTOSConfig.h b/radio/src/FreeRTOSConfig.h index 4ae31c3ae..ef598e888 100644 --- a/radio/src/FreeRTOSConfig.h +++ b/radio/src/FreeRTOSConfig.h @@ -74,6 +74,10 @@ to exclude the API function. */ #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 +#if defined(THREADSAFE_MALLOC) +#define INCLUDE_xTaskGetSchedulerState 1 +#endif + /* Cortex-M specific definitions. */ #ifdef __NVIC_PRIO_BITS /* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */ diff --git a/radio/src/syscalls.c b/radio/src/syscalls.c index c9de63def..ed3bd31c5 100644 --- a/radio/src/syscalls.c +++ b/radio/src/syscalls.c @@ -53,13 +53,15 @@ extern caddr_t _sbrk(int nbytes) void __malloc_lock(struct _reent *r) { (void)(r); - vTaskSuspendAll(); + if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) + vTaskSuspendAll(); }; void __malloc_unlock(struct _reent *r) { (void)(r); - (void)xTaskResumeAll(); + if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) + (void)xTaskResumeAll(); }; #endif