X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fmessage%2Fpacket.c;h=9ed9a0c47f2eb3054553feb4402dab82f0d6d504;hb=8cc5f12befb744624f1683cda7d979d7c6cff4a5;hp=a61999aedc16ec39354b697f3d8afcc6e9fac665;hpb=a6d85d2fba4fb0ee4253441c7d49dfe3378c07bf;p=babeltrace.git diff --git a/lib/graph/message/packet.c b/lib/graph/message/packet.c index a61999ae..9ed9a0c4 100644 --- a/lib/graph/message/packet.c +++ b/lib/graph/message/packet.c @@ -22,24 +22,24 @@ */ #define BT_LOG_TAG "MSG-PACKET" -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include static inline @@ -87,6 +87,7 @@ struct bt_message *create_packet_message( struct bt_message_packet *message = NULL; struct bt_stream *stream; struct bt_stream_class *stream_class; + bool need_cs; BT_ASSERT(msg_iter); BT_ASSERT_PRE_NON_NULL(packet, "Packet"); @@ -94,11 +95,28 @@ struct bt_message *create_packet_message( BT_ASSERT(stream); stream_class = bt_stream_borrow_class(stream); BT_ASSERT(stream_class); - BT_ASSERT_PRE((with_cs && stream_class->default_clock_class) || - (!with_cs && !stream_class->default_clock_class), - "Creating a packet message with a default clock snapshot, but without " - "a default clock class, or without a default clock snapshot, " - "but with a default clock class: ", + + if (pool == &msg_iter->graph->packet_begin_msg_pool) { + need_cs = stream_class->packets_have_beginning_default_clock_snapshot; + } else { + need_cs = stream_class->packets_have_end_default_clock_snapshot; + } + + /* + * `packet_has_default_clock_snapshot` implies that the stream + * class has a default clock class (precondition). + */ + BT_ASSERT_PRE(need_cs ? with_cs : true, + "Unexpected stream class configuration when creating " + "a packet beginning or end message: " + "a default clock snapshot is needed, but none was provided: " + "%![stream-]+s, %![sc-]+S, with-cs=%d, " + "cs-val=%" PRIu64, + stream, stream_class, with_cs, raw_value); + BT_ASSERT_PRE(!need_cs ? !with_cs : true, + "Unexpected stream class configuration when creating " + "a packet beginning or end message: " + "no default clock snapshot is needed, but one was provided: " "%![stream-]+s, %![sc-]+S, with-cs=%d, " "cs-val=%" PRIu64, stream, stream_class, with_cs, raw_value); @@ -285,10 +303,9 @@ const struct bt_packet *bt_message_packet_end_borrow_packet_const( } static inline -enum bt_clock_snapshot_state +const struct bt_clock_snapshot * borrow_packet_message_default_clock_snapshot_const( - const struct bt_message *message, - const struct bt_clock_snapshot **snapshot) + const struct bt_message *message) { struct bt_message_packet *packet_msg = (void *) message; @@ -297,29 +314,52 @@ borrow_packet_message_default_clock_snapshot_const( "Message's stream's class has no default clock class: " "%![msg-]+n, %![sc-]+S", message, packet_msg->packet->stream->class); - BT_ASSERT_PRE_NON_NULL(snapshot, "Clock snapshot (output)"); - *snapshot = packet_msg->default_cs; - return BT_CLOCK_SNAPSHOT_STATE_KNOWN; + return packet_msg->default_cs; } -enum bt_clock_snapshot_state +const struct bt_clock_snapshot * bt_message_packet_beginning_borrow_default_clock_snapshot_const( - const struct bt_message *msg, - const struct bt_clock_snapshot **snapshot) + const struct bt_message *msg) { BT_ASSERT_PRE_NON_NULL(msg, "Message"); BT_ASSERT_PRE_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_PACKET_BEGINNING); - return borrow_packet_message_default_clock_snapshot_const( - msg, snapshot); + return borrow_packet_message_default_clock_snapshot_const(msg); } -enum bt_clock_snapshot_state +const struct bt_clock_snapshot * bt_message_packet_end_borrow_default_clock_snapshot_const( - const struct bt_message *msg, - const struct bt_clock_snapshot **snapshot) + const struct bt_message *msg) +{ + BT_ASSERT_PRE_NON_NULL(msg, "Message"); + BT_ASSERT_PRE_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_PACKET_END); + return borrow_packet_message_default_clock_snapshot_const(msg); +} + +static inline +const struct bt_clock_class * +borrow_packet_message_stream_class_default_clock_class( + const struct bt_message *msg) +{ + struct bt_message_packet *packet_msg = (void *) msg; + + BT_ASSERT(msg); + return packet_msg->packet->stream->class->default_clock_class; +} + +const struct bt_clock_class * +bt_message_packet_beginning_borrow_stream_class_default_clock_class_const( + const struct bt_message *msg) +{ + BT_ASSERT_PRE_NON_NULL(msg, "Message"); + BT_ASSERT_PRE_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_PACKET_BEGINNING); + return borrow_packet_message_stream_class_default_clock_class(msg); +} + +const struct bt_clock_class * +bt_message_packet_end_borrow_stream_class_default_clock_class_const( + const struct bt_message *msg) { BT_ASSERT_PRE_NON_NULL(msg, "Message"); BT_ASSERT_PRE_MSG_IS_TYPE(msg, BT_MESSAGE_TYPE_PACKET_END); - return borrow_packet_message_default_clock_snapshot_const( - msg, snapshot); + return borrow_packet_message_stream_class_default_clock_class(msg); }