X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fgraph%2Fmessage%2Fpacket.c;h=32ce5698091daa10d67d569f290af546f89c470d;hb=a1f053a957f7ddce25c8a4e96e3d7aa9fa8cc30b;hp=22894c9b611c3b088be5b82e64316c101e2931f9;hpb=b37345369d0a5a8d31934d1edb76f723a88f0038;p=babeltrace.git diff --git a/lib/graph/message/packet.c b/lib/graph/message/packet.c index 22894c9b..32ce5698 100644 --- a/lib/graph/message/packet.c +++ b/lib/graph/message/packet.c @@ -31,29 +31,29 @@ #include #include #include -#include -#include +#include +#include +#include +#include #include #include #include #include #include -BT_HIDDEN -struct bt_message *bt_message_packet_beginning_new(struct bt_graph *graph) +static inline +struct bt_message *new_packet_message(struct bt_graph *graph, + enum bt_message_type type, bt_object_release_func recycle_func) { - struct bt_message_packet_beginning *message; + struct bt_message_packet *message; - message = g_new0(struct bt_message_packet_beginning, 1); + message = g_new0(struct bt_message_packet, 1); if (!message) { - BT_LOGE_STR("Failed to allocate one packet beginning message."); + BT_LOGE_STR("Failed to allocate one packet message."); goto error; } - bt_message_init(&message->parent, - BT_MESSAGE_TYPE_PACKET_BEGINNING, - (bt_object_release_func) bt_message_packet_beginning_recycle, - graph); + bt_message_init(&message->parent, type, recycle_func, graph); goto end; error: @@ -63,27 +63,39 @@ end: return (void *) message; } -struct bt_message *bt_message_packet_beginning_create( - struct bt_self_message_iterator *self_msg_iter, - struct bt_packet *packet) +BT_HIDDEN +struct bt_message *bt_message_packet_beginning_new(struct bt_graph *graph) { - struct bt_self_component_port_input_message_iterator *msg_iter = - (void *) self_msg_iter; - struct bt_message_packet_beginning *message = NULL; + return new_packet_message(graph, BT_MESSAGE_TYPE_PACKET_BEGINNING, + (bt_object_release_func) bt_message_packet_beginning_recycle); +} + +BT_HIDDEN +struct bt_message *bt_message_packet_end_new(struct bt_graph *graph) +{ + return new_packet_message(graph, BT_MESSAGE_TYPE_PACKET_END, + (bt_object_release_func) bt_message_packet_end_recycle); +} + +static inline +struct bt_message *bt_message_packet_create( + struct bt_self_component_port_input_message_iterator *msg_iter, + struct bt_packet *packet, struct bt_object_pool *pool) +{ + struct bt_message_packet *message = NULL; struct bt_stream *stream; struct bt_stream_class *stream_class; - BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator"); + BT_ASSERT(msg_iter); BT_ASSERT_PRE_NON_NULL(packet, "Packet"); stream = bt_packet_borrow_stream(packet); BT_ASSERT(stream); stream_class = bt_stream_borrow_class(stream); BT_ASSERT(stream_class); - BT_LIB_LOGD("Creating packet beginning message object: " + BT_LIB_LOGD("Creating packet message object: " "%![packet-]+a, %![stream-]+s, %![sc-]+S", packet, stream, stream_class); - message = (void *) bt_message_create_from_pool( - &msg_iter->graph->packet_begin_msg_pool, msg_iter->graph); + message = (void *) bt_message_create_from_pool(pool, msg_iter->graph); if (!message) { /* bt_message_create_from_pool() logs errors */ goto end; @@ -94,7 +106,7 @@ struct bt_message *bt_message_packet_beginning_create( bt_object_get_no_null_check_no_parent_check( &message->packet->base); bt_packet_set_is_frozen(packet, true); - BT_LIB_LOGD("Created packet beginning message object: " + BT_LIB_LOGD("Created packet message object: " "%![msg-]+n, %![packet-]+a, %![stream-]+s, %![sc-]+S", message, packet, stream, stream_class); goto end; @@ -103,164 +115,107 @@ end: return (void *) message; } -BT_HIDDEN -void bt_message_packet_beginning_destroy(struct bt_message *msg) +struct bt_message *bt_message_packet_beginning_create( + struct bt_self_message_iterator *self_msg_iter, + struct bt_packet *packet) { - struct bt_message_packet_beginning *packet_begin_msg = (void *) msg; + struct bt_self_component_port_input_message_iterator *msg_iter = + (void *) self_msg_iter; - BT_LIB_LOGD("Destroying packet beginning message: %!+n", msg); - BT_LIB_LOGD("Putting packet: %!+a", packet_begin_msg->packet); - BT_OBJECT_PUT_REF_AND_RESET(packet_begin_msg->packet); - g_free(msg); + BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator"); + return bt_message_packet_create(msg_iter, packet, + &msg_iter->graph->packet_begin_msg_pool); } -BT_HIDDEN -void bt_message_packet_beginning_recycle(struct bt_message *msg) +struct bt_message *bt_message_packet_end_create( + struct bt_self_message_iterator *self_msg_iter, + struct bt_packet *packet) { - struct bt_message_packet_beginning *packet_begin_msg = (void *) msg; - struct bt_graph *graph; - - BT_ASSERT(packet_begin_msg); - - if (unlikely(!msg->graph)) { - bt_message_packet_beginning_destroy(msg); - return; - } + struct bt_self_component_port_input_message_iterator *msg_iter = + (void *) self_msg_iter; - BT_LIB_LOGD("Recycling packet beginning message: %!+n", msg); - bt_message_reset(msg); - bt_object_put_no_null_check(&packet_begin_msg->packet->base); - packet_begin_msg->packet = NULL; - graph = msg->graph; - msg->graph = NULL; - bt_object_pool_recycle_object(&graph->packet_begin_msg_pool, msg); + BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator"); + return bt_message_packet_create(msg_iter, packet, + &msg_iter->graph->packet_end_msg_pool); } -struct bt_packet *bt_message_packet_beginning_borrow_packet( - struct bt_message *message) +BT_HIDDEN +void bt_message_packet_destroy(struct bt_message *msg) { - struct bt_message_packet_beginning *packet_begin; + struct bt_message_packet *packet_msg = (void *) msg; - BT_ASSERT_PRE_NON_NULL(message, "Message"); - BT_ASSERT_PRE_MSG_IS_TYPE(message, - BT_MESSAGE_TYPE_PACKET_BEGINNING); - packet_begin = (void *) message; - return packet_begin->packet; + BT_LIB_LOGD("Destroying packet message: %!+n", msg); + BT_LIB_LOGD("Putting packet: %!+a", packet_msg->packet); + BT_OBJECT_PUT_REF_AND_RESET(packet_msg->packet); + g_free(msg); } -const struct bt_packet *bt_message_packet_beginning_borrow_packet_const( - const struct bt_message *message) +static inline +void recycle_packet_message(struct bt_message *msg, struct bt_object_pool *pool) { - return bt_message_packet_beginning_borrow_packet( - (void *) message); + struct bt_message_packet *packet_msg = (void *) msg; + + BT_LIB_LOGD("Recycling packet message: %!+n", msg); + bt_message_reset(msg); + bt_object_put_no_null_check(&packet_msg->packet->base); + packet_msg->packet = NULL; + msg->graph = NULL; + bt_object_pool_recycle_object(pool, msg); } BT_HIDDEN -struct bt_message *bt_message_packet_end_new(struct bt_graph *graph) +void bt_message_packet_beginning_recycle(struct bt_message *msg) { - struct bt_message_packet_end *message; + BT_ASSERT(msg); - message = g_new0(struct bt_message_packet_end, 1); - if (!message) { - BT_LOGE_STR("Failed to allocate one packet end message."); - goto error; + if (unlikely(!msg->graph)) { + bt_message_packet_destroy(msg); + return; } - bt_message_init(&message->parent, - BT_MESSAGE_TYPE_PACKET_END, - (bt_object_release_func) bt_message_packet_end_recycle, - graph); - goto end; - -error: - BT_OBJECT_PUT_REF_AND_RESET(message); - -end: - return (void *) message; + recycle_packet_message(msg, &msg->graph->packet_begin_msg_pool); } -struct bt_message *bt_message_packet_end_create( - struct bt_self_message_iterator *self_msg_iter, - struct bt_packet *packet) +BT_HIDDEN +void bt_message_packet_end_recycle(struct bt_message *msg) { - struct bt_self_component_port_input_message_iterator *msg_iter = - (void *) self_msg_iter; - struct bt_message_packet_end *message = NULL; - struct bt_stream *stream; - struct bt_stream_class *stream_class; + BT_ASSERT(msg); - BT_ASSERT_PRE_NON_NULL(msg_iter, "Message iterator"); - BT_ASSERT_PRE_NON_NULL(packet, "Packet"); - stream = bt_packet_borrow_stream(packet); - BT_ASSERT(stream); - stream_class = bt_stream_borrow_class(stream); - BT_ASSERT(stream_class); - BT_LIB_LOGD("Creating packet end message object: " - "%![packet-]+a, %![stream-]+s, %![sc-]+S", - packet, stream, stream_class); - message = (void *) bt_message_create_from_pool( - &msg_iter->graph->packet_end_msg_pool, msg_iter->graph); - if (!message) { - /* bt_message_create_from_pool() logs errors */ - goto end; + if (unlikely(!msg->graph)) { + bt_message_packet_destroy(msg); + return; } - BT_ASSERT(!message->packet); - message->packet = packet; - bt_object_get_no_null_check_no_parent_check( - &message->packet->base); - bt_packet_set_is_frozen(packet, true); - BT_LIB_LOGD("Created packet end message object: " - "%![msg-]+n, %![packet-]+a, %![stream-]+s, %![sc-]+S", - message, packet, stream, stream_class); - goto end; - -end: - return (void *) message; + recycle_packet_message(msg, &msg->graph->packet_end_msg_pool); } -BT_HIDDEN -void bt_message_packet_end_destroy(struct bt_message *msg) +struct bt_packet *bt_message_packet_beginning_borrow_packet( + struct bt_message *message) { - struct bt_message_packet_end *packet_end_msg = (void *) msg; + struct bt_message_packet *packet_msg = (void *) message; - BT_LIB_LOGD("Destroying packet end message: %!+n", msg); - BT_LIB_LOGD("Putting packet: %!+a", packet_end_msg->packet); - BT_OBJECT_PUT_REF_AND_RESET(packet_end_msg->packet); - g_free(msg); + BT_ASSERT_PRE_NON_NULL(message, "Message"); + BT_ASSERT_PRE_MSG_IS_TYPE(message, + BT_MESSAGE_TYPE_PACKET_BEGINNING); + return packet_msg->packet; } -BT_HIDDEN -void bt_message_packet_end_recycle(struct bt_message *msg) +const struct bt_packet *bt_message_packet_beginning_borrow_packet_const( + const struct bt_message *message) { - struct bt_message_packet_end *packet_end_msg = (void *) msg; - struct bt_graph *graph; - - BT_ASSERT(packet_end_msg); - - if (!msg->graph) { - bt_message_packet_end_destroy(msg); - return; - } - - BT_LIB_LOGD("Recycling packet end message: %!+n", msg); - bt_message_reset(msg); - BT_OBJECT_PUT_REF_AND_RESET(packet_end_msg->packet); - graph = msg->graph; - msg->graph = NULL; - bt_object_pool_recycle_object(&graph->packet_end_msg_pool, msg); + return bt_message_packet_beginning_borrow_packet( + (void *) message); } struct bt_packet *bt_message_packet_end_borrow_packet( struct bt_message *message) { - struct bt_message_packet_end *packet_end; + struct bt_message_packet *packet_msg = (void *) message; BT_ASSERT_PRE_NON_NULL(message, "Message"); BT_ASSERT_PRE_MSG_IS_TYPE(message, BT_MESSAGE_TYPE_PACKET_END); - packet_end = (void *) message; - return packet_end->packet; + return packet_msg->packet; } const struct bt_packet *bt_message_packet_end_borrow_packet_const(