serialqueue: Message receive_time must be taken after read()
The est_clock calculation code requires timestamps on status messages to never be prior to the reception of the message. The eventtime of handle_message() is taken before the read() and there is a small possibility that it could be inaccurate enough to corrupt the est_clock calculation. Take a new timestamp when storing receive_time to prevent this. This fix prevents some firmware "Move queue empty" shutdowns. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
f28eb902df
commit
6de85d02ae
|
@ -496,7 +496,7 @@ handle_message(struct serialqueue *sq, double eventtime, int len)
|
|||
// Add message to receive queue
|
||||
struct queue_message *qm = message_fill(sq->input_buf, len);
|
||||
qm->sent_time = sq->last_receive_sent_time;
|
||||
qm->receive_time = eventtime;
|
||||
qm->receive_time = get_monotonic(); // must be time post read()
|
||||
list_add_tail(&qm->node, &sq->receive_queue);
|
||||
check_wake_receive(sq);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue