nasa / cFE

The Core Flight System (cFS) Core Flight Executive (cFE)
Apache License 2.0
402 stars 198 forks source link

CFE_SB_ReceiveBuffer times out immediately if the system time changes on POSIX #2574

Open ahatstat opened 6 days ago

ahatstat commented 6 days ago

Describe the bug When pending on CFE_SB_ReceiveBuffer with a timeout on a POSIX system, a change to the system time causes the function to immediately return with a timeout error code or pend longer than specified depending on the direction of the time change.

To Reproduce CFE_SB_ReceiveBuffer with a timeout of 10 seconds on a Linux system. Change the system time ahead by 1 hour. The function will return immediately with code CFE_SB_TIME_OUT regardless of the actual elapsed time.

Expected behavior The function should always wait for the specified timeout regardless of any change to the system time. If this is not practical, it would be helpful to document this behavior in the function doc string.

System observed on: ARM Cortex A9 Linux Versions Draco-RC5

Additional context The implementation calls OSAL function OS_QueueGet. The POSIX implementation calls mq_timedreceive which is known to suffer from this problem.

Reporter Info Andrew Hatstat, Geost