cFE icon indicating copy to clipboard operation
cFE copied to clipboard

CFE_SB_ReceiveBuffer times out immediately if the system time changes on POSIX

Open ahatstat opened this issue 1 year ago • 2 comments

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

ahatstat avatar Jul 03 '24 19:07 ahatstat

Can confirm, I have experienced this same problem and came to the same conclusion as you. The mq API is simply not sufficient for working with multiple clocks.

irowebbn avatar Sep 11 '24 21:09 irowebbn

CCB 19 December 2024: Will address through documentation.

dzbaker avatar Dec 19 '24 19:12 dzbaker