From 6c3d09e279bb288a5bb342ed0e35d10bc00ca05e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 13 Mar 2024 19:12:48 +0200 Subject: [PATCH] ptp: Initialize expected DELAY_REQ seqnum to an invalid value This allows distinguishing pending syncs that didn't have a DELAY_REQ sent from ones that did but used a seqnum of 0, like the very first one. Specifically, if the first one or more syncs are still pending and we send the first DELAY_REQ for a later pending sync, then the DELAY_RESP would've been wrongly associated to the very first pending sync because of the seqnum. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3383 Part-of: --- subprojects/gstreamer/libs/gst/net/gstptpclock.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subprojects/gstreamer/libs/gst/net/gstptpclock.c b/subprojects/gstreamer/libs/gst/net/gstptpclock.c index 06b9d0df30..22c650d996 100644 --- a/subprojects/gstreamer/libs/gst/net/gstptpclock.c +++ b/subprojects/gstreamer/libs/gst/net/gstptpclock.c @@ -321,14 +321,14 @@ typedef struct { guint domain; - guint16 sync_seqnum; + guint32 sync_seqnum; GstClockTime sync_recv_time_local; /* t2 */ GstClockTime sync_send_time_remote; /* t1, might be -1 if FOLLOW_UP pending */ GstClockTime follow_up_recv_time_local; GSource *timeout_source; guint8 iface_idx; - guint16 delay_req_seqnum; + guint32 delay_req_seqnum; GstClockTime delay_req_send_time_local; /* t3, -1 if we wait for FOLLOW_UP */ GstClockTime delay_req_recv_time_remote; /* t4, -1 if we wait */ GstClockTime delay_resp_recv_time_local; @@ -1668,6 +1668,7 @@ handle_sync_message (PtpMessage * msg, guint8 iface_idx, sync->delay_req_send_time_local = GST_CLOCK_TIME_NONE; sync->delay_req_recv_time_remote = GST_CLOCK_TIME_NONE; sync->delay_resp_recv_time_local = GST_CLOCK_TIME_NONE; + sync->delay_req_seqnum = G_MAXUINT32; /* 0.5 correction factor for division later */ sync->correction_field_sync = msg->correction_field;