xTaskAbortDelayFromISR()

I am thinking that I need the function xTaskAbortDelayFromISR() which dose not exist.
If someone can give me a better design for my use-case that would be possibly work as well.

I have a task that needs to wake-up and do something at particular Tick counts. I use xTaskDelayUntil() to have the task wake-up at that tick. So there is this complicated loop in the task that delays till that tick and then figures out how long to wait until it needs to do the next step at a particular Tick. I receive messages from other tasks updating when something new needs to happen. When this update comes in I need to use xTaskAbortDelay() to abort the current delay the task is in to reschedule it for the new delay. This all works fine when I am dealing with new tasks coming in from other tasks, but now I am adding functionality that needs to get this update from an ISR.
Currently I am thinking of creating another task just to receive the data from the ISR and then send the update to the other task.

The two options I can think of are:

  1. Use xTimerPendFunctionFromISR to pend a function to the timer task to do the abort (that is basically you create another task, but use a task you likely are already using).

  2. The other is to rather than use xTaskDelayUntil(), to compute the number of ticks and then wait for a semaphore or Direct-to-task notification. This does have the race condition of getting a tick interrupt between getting the current tick, and the actual blocking operation.

Or you could use xTaskGetTickCount, calculate the timeout/number of ticks until you have to do something and do a timed wait for incoming queue messages with this calculated timeout to wait for the desired number of ticks and queue messages.
If no message came in it‘s just a timeout. If a message came in, also check the tick count after handling the message to see if the number of ticks also expired.
This is more or less the same approach as Richard described in 2.

The timer task uses the similar approach - FreeRTOS-Kernel/timers.c at main · FreeRTOS/FreeRTOS-Kernel · GitHub.