// SPDX-License-Identifier: Apache-2.0 #include "freertos_task_hooks.h" #include #include static FreeRtosTaskCreateHook create_hook = NULL; static FreeRtosTaskDeleteHook delete_hook = NULL; void freertos_set_task_hooks(FreeRtosTaskCreateHook create, FreeRtosTaskDeleteHook delete_task) { create_hook = create; delete_hook = delete_task; } BaseType_t xTaskCreate(TaskFunction_t function, const char* const name, const configSTACK_DEPTH_TYPE stack_depth, void* const parameter, UBaseType_t priority, TaskHandle_t* const out_handle) { if (create_hook != NULL) { return create_hook(__builtin_return_address(0), function, name, stack_depth, parameter, priority, out_handle); } return freertos_real_xTaskCreate(function, name, stack_depth, parameter, priority, out_handle); } void vTaskDelete(TaskHandle_t handle) { if (delete_hook != NULL) { delete_hook(__builtin_return_address(0), handle); return; } freertos_real_vTaskDelete(handle); } void vPortCancelThread(void* task) { sigset_t all_signals; sigset_t previous_signals; sigfillset(&all_signals); pthread_sigmask(SIG_BLOCK, &all_signals, &previous_signals); freertos_real_vPortCancelThread(task); pthread_sigmask(SIG_SETMASK, &previous_signals, NULL); }