X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fctf-ir%2Fpacket-header-field.c;h=17d88ad09cdcf40f55b1d8cee095ea6cc3bc4a3e;hp=58d2716b3b9fc5ba81bdba186acc00cb2f1e98e1;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c800eb3790218d2f33df01e77ec38cbd43cc02a1 diff --git a/lib/ctf-ir/packet-header-field.c b/lib/ctf-ir/packet-header-field.c index 58d2716b..17d88ad0 100644 --- a/lib/ctf-ir/packet-header-field.c +++ b/lib/ctf-ir/packet-header-field.c @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -34,9 +35,7 @@ struct bt_field *bt_packet_header_field_borrow_field( { struct bt_field_wrapper *field_wrapper = (void *) header_field; - BT_ASSERT_PRE_NON_NULL(field_wrapper, "Event header field"); - BT_ASSERT_PRE_NON_NULL(field_wrapper->field, - "Event header field's field object"); + BT_ASSERT_PRE_NON_NULL(field_wrapper, "Packet header field"); return (void *) field_wrapper->field; } @@ -44,7 +43,7 @@ void bt_packet_header_field_release(struct bt_packet_header_field *header_field) { struct bt_field_wrapper *field_wrapper = (void *) header_field; - BT_ASSERT_PRE_NON_NULL(field_wrapper, "Event header field"); + BT_ASSERT_PRE_NON_NULL(field_wrapper, "Packet header field"); /* * Do not recycle because the pool could be destroyed at this @@ -55,3 +54,34 @@ void bt_packet_header_field_release(struct bt_packet_header_field *header_field) */ bt_field_wrapper_destroy(field_wrapper); } + +struct bt_packet_header_field *bt_packet_header_field_create( + struct bt_trace *trace) +{ + struct bt_field_wrapper *field_wrapper; + + BT_ASSERT_PRE_NON_NULL(trace, "Trace"); + BT_ASSERT_PRE(trace->packet_header_ft, + "Trace has no packet header field type: %!+t", trace); + field_wrapper = bt_field_wrapper_create( + &trace->packet_header_field_pool, + (void *) trace->packet_header_ft); + if (!field_wrapper) { + BT_LIB_LOGE("Cannot allocate one packet header field from trace: " + "%![trace-]+t", trace); + goto error; + } + + BT_ASSERT(field_wrapper->field); + bt_trace_freeze(trace); + goto end; + +error: + if (field_wrapper) { + bt_field_wrapper_destroy(field_wrapper); + field_wrapper = NULL; + } + +end: + return (void *) field_wrapper; +}