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);