Fix: lib: strengthen clock expectation check for no Unix epoch / no UUID case
[babeltrace.git] / src / lib / graph / iterator.h
index ed093633a5e208ebd162e3a209ded54f73669f67..581f9c1f8d5e667c1b0cb1e93989a2316323366c 100644 (file)
@@ -142,14 +142,35 @@ struct bt_message_iterator {
                        CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID,
                } type;
 
-               /*
-                * Expected UUID of the clock, if `type`is CLOCK_EXPECTATION_ORIGIN_OTHER_UUID.
-                *
-                * If the clock's origin is the unix epoch, the UUID is
-                * irrelevant (as the clock will be correlatable with other
-                * clocks having the same origin).
-                */
-               bt_uuid_t uuid;
+
+               union {
+                       /*
+                        * Expected UUID of the clock, if `type`is
+                        * CLOCK_EXPECTATION_ORIGIN_OTHER_UUID.
+                        *
+                        * If the clock's origin is the unix epoch, the UUID is
+                        * irrelevant (as the clock will be correlatable with other
+                        * clocks having the same origin).
+                        */
+                       bt_uuid_t uuid;
+
+                       /*
+                        * Expected clock class, if `type` is
+                        * CLOCK_EXPECTATION_ORIGIN_OTHER_NO_UUID.
+                        *
+                        * If the first clock class seen has an unknown origin
+                        * and no UUID, then all subsequent clock classes seen
+                        * must be the same instance.
+                        *
+                        * To make sure that the clock class pointed by this
+                        * field doesn't get freed and another one reallocated
+                        * at the same address (which could potentially bypass
+                        * the clock expectation check), we keep a strong
+                        * reference, ensuring that the clock class lives at
+                        * least as long as the iterator.
+                        */
+                       const bt_clock_class *clock_class;
+               };
        } clock_expectation;
 
        BT_IF_DEV_MODE(GHashTable *per_stream_state);
This page took 0.036297 seconds and 4 git commands to generate.