+ if (!msg_it->packet) {
+ msg = NULL;
+ goto end;
+ }
+
+ /*
+ * Check if we need to emit the delayed packet
+ * beginning message instead of the packet end message.
+ */
+ if (G_UNLIKELY(msg_it->emit_delayed_packet_beginning_msg)) {
+ msg = emit_delayed_packet_beg_msg(msg_it);
+ /* Don't forget to emit the packet end message. */
+ msg_it->state = STATE_EMIT_QUEUED_MSG_PACKET_END;
+ goto end;
+ }
+
+ /* Check if may be affected by lttng-crash timestamp_end quirk. */
+ if (G_UNLIKELY(msg_it->meta.tc->quirks.lttng_crash)) {
+ /*
+ * Check if the `timestamp_begin` field is non-zero but
+ * `timestamp_end` is zero. It means the trace is affected by
+ * the lttng-crash packet `timestamp_end` quirk and must be
+ * fixed up by omitting to update the default clock snapshot to
+ * the `timestamp_end` as is typically done.
+ */
+ if (msg_it->snapshots.beginning_clock != 0 &&
+ msg_it->snapshots.end_clock == 0) {
+ update_default_cs = false;
+ }
+ }
+
+ /*
+ * Check if may be affected by lttng event-after-packet `timestamp_end`
+ * quirk.
+ */
+ if (msg_it->meta.tc->quirks.lttng_event_after_packet) {
+ /*
+ * Check if `timestamp_end` is smaller then the current
+ * default_clock_snapshot (which is set to the last event
+ * decoded). It means the trace is affected by the lttng
+ * `event-after-packet` packet `timestamp_end` quirk and must
+ * be fixed up by omitting to update the default clock snapshot
+ * to the `timestamp_end` as is typically done.
+ */
+ if (msg_it->snapshots.end_clock < msg_it->default_clock_snapshot) {
+ update_default_cs = false;
+ }