X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Fevent-class.c;h=971d8115cb6a3b0c6ab001e9745478da457eff05;hb=862ca4ed7b3a8ef14f69529d252bccc48a33108a;hp=15397ff657c3eb4e9a1210de9bab6f30019052a9;hpb=140e6d943ff8f5657db28fbbe24ee8c98b7ca2f9;p=babeltrace.git diff --git a/lib/trace-ir/event-class.c b/lib/trace-ir/event-class.c index 15397ff6..971d8115 100644 --- a/lib/trace-ir/event-class.c +++ b/lib/trace-ir/event-class.c @@ -30,11 +30,10 @@ #include #include #include -#include #include +#include #include #include -#include #include #include #include @@ -51,7 +50,7 @@ #include #define BT_ASSERT_PRE_EVENT_CLASS_HOT(_ec) \ - BT_ASSERT_PRE_HOT(((struct bt_event_class *) (_ec)), \ + BT_ASSERT_PRE_HOT(((const struct bt_event_class *) (_ec)), \ "Event class", ": %!+E", (_ec)) static @@ -63,16 +62,18 @@ void destroy_event_class(struct bt_object *obj) if (event_class->name.str) { g_string_free(event_class->name.str, TRUE); + event_class->name.str = NULL; } if (event_class->emf_uri.str) { g_string_free(event_class->emf_uri.str, TRUE); + event_class->emf_uri.str = NULL; } BT_LOGD_STR("Putting context field classe."); - bt_object_put_ref(event_class->specific_context_fc); + BT_OBJECT_PUT_REF_AND_RESET(event_class->specific_context_fc); BT_LOGD_STR("Putting payload field classe."); - bt_object_put_ref(event_class->payload_fc); + BT_OBJECT_PUT_REF_AND_RESET(event_class->payload_fc); bt_object_pool_finalize(&event_class->event_pool); g_free(obj); } @@ -86,13 +87,14 @@ void free_event(struct bt_event *event, BT_ASSERT_PRE_FUNC static -bool event_class_id_is_unique(struct bt_stream_class *stream_class, uint64_t id) +bool event_class_id_is_unique(const struct bt_stream_class *stream_class, + uint64_t id) { uint64_t i; bool is_unique = true; for (i = 0; i < stream_class->event_classes->len; i++) { - struct bt_event_class *ec = + const struct bt_event_class *ec = stream_class->event_classes->pdata[i]; if (ec->id == id) { @@ -166,41 +168,35 @@ end: return event_class; } -struct bt_private_event_class *bt_private_event_class_create( - struct bt_private_stream_class *priv_stream_class) +struct bt_event_class *bt_event_class_create( + struct bt_stream_class *stream_class) { - struct bt_stream_class *stream_class = (void *) priv_stream_class; - BT_ASSERT_PRE_NON_NULL(stream_class, "Stream class"); BT_ASSERT_PRE(stream_class->assigns_automatic_event_class_id, "Stream class does not automatically assigns event class IDs: " "%![sc-]+S", stream_class); - return (void *) create_event_class_with_id((void *) stream_class, + return create_event_class_with_id(stream_class, (uint64_t) stream_class->event_classes->len); } -struct bt_private_event_class *bt_private_event_class_create_with_id( - struct bt_private_stream_class *priv_stream_class, uint64_t id) +struct bt_event_class *bt_event_class_create_with_id( + struct bt_stream_class *stream_class, uint64_t id) { - struct bt_stream_class *stream_class = (void *) priv_stream_class; - BT_ASSERT_PRE(!stream_class->assigns_automatic_event_class_id, "Stream class automatically assigns event class IDs: " "%![sc-]+S", stream_class); - return (void *) create_event_class_with_id((void *) stream_class, id); + return create_event_class_with_id(stream_class, id); } -const char *bt_event_class_get_name(struct bt_event_class *event_class) +const char *bt_event_class_get_name(const struct bt_event_class *event_class) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); return event_class->name.value; } -int bt_private_event_class_set_name(struct bt_private_event_class *priv_event_class, +int bt_event_class_set_name(struct bt_event_class *event_class, const char *name) { - struct bt_event_class *event_class = (void *) priv_event_class; - BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); BT_ASSERT_PRE_NON_NULL(name, "Name"); BT_ASSERT_PRE_EVENT_CLASS_HOT(event_class); @@ -210,14 +206,14 @@ int bt_private_event_class_set_name(struct bt_private_event_class *priv_event_cl return 0; } -uint64_t bt_event_class_get_id(struct bt_event_class *event_class) +uint64_t bt_event_class_get_id(const struct bt_event_class *event_class) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); return event_class->id; } enum bt_property_availability bt_event_class_get_log_level( - struct bt_event_class *event_class, + const struct bt_event_class *event_class, enum bt_event_class_log_level *log_level) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); @@ -227,12 +223,10 @@ enum bt_property_availability bt_event_class_get_log_level( return event_class->log_level.base.avail; } -void bt_private_event_class_set_log_level( - struct bt_private_event_class *priv_event_class, +void bt_event_class_set_log_level( + struct bt_event_class *event_class, enum bt_event_class_log_level log_level) { - struct bt_event_class *event_class = (void *) priv_event_class; - BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); BT_ASSERT_PRE_EVENT_CLASS_HOT(event_class); bt_property_uint_set(&event_class->log_level, @@ -240,18 +234,16 @@ void bt_private_event_class_set_log_level( BT_LIB_LOGV("Set event class's log level: %!+E", event_class); } -const char *bt_event_class_get_emf_uri(struct bt_event_class *event_class) +const char *bt_event_class_get_emf_uri(const struct bt_event_class *event_class) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); return event_class->emf_uri.value; } -int bt_private_event_class_set_emf_uri( - struct bt_private_event_class *priv_event_class, +int bt_event_class_set_emf_uri( + struct bt_event_class *event_class, const char *emf_uri) { - struct bt_event_class *event_class = (void *) priv_event_class; - BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); BT_ASSERT_PRE_NON_NULL(emf_uri, "EMF URI"); BT_ASSERT_PRE_EVENT_CLASS_HOT(event_class); @@ -268,38 +260,28 @@ struct bt_stream_class *bt_event_class_borrow_stream_class( return bt_event_class_borrow_stream_class_inline(event_class); } -struct bt_private_stream_class * -bt_private_event_class_borrow_stream_class( - struct bt_private_event_class *event_class) +const struct bt_stream_class * +bt_event_class_borrow_stream_class_const( + const struct bt_event_class *event_class) { - return (void *) bt_event_class_borrow_stream_class( - (void *) event_class); + return bt_event_class_borrow_stream_class((void *) event_class); } -struct bt_field_class *bt_event_class_borrow_specific_context_field_class( - struct bt_event_class *event_class) +const struct bt_field_class * +bt_event_class_borrow_specific_context_field_class_const( + const struct bt_event_class *event_class) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); return event_class->specific_context_fc; } -struct bt_private_field_class * -bt_private_event_class_borrow_specific_context_field_class( - struct bt_private_event_class *event_class) -{ - return (void *) bt_event_class_borrow_specific_context_field_class( - (void *) event_class); -} - -int bt_private_event_class_set_specific_context_field_class( - struct bt_private_event_class *priv_event_class, - struct bt_private_field_class *priv_field_class) +int bt_event_class_set_specific_context_field_class( + struct bt_event_class *event_class, + struct bt_field_class *field_class) { int ret; - struct bt_event_class *event_class = (void *) priv_event_class; - struct bt_field_class *field_class = (void *) priv_field_class; struct bt_stream_class *stream_class; - struct bt_trace *trace; + struct bt_trace_class *trace_class; struct bt_resolve_field_path_context resolve_ctx = { .packet_header = NULL, .packet_context = NULL, @@ -318,8 +300,8 @@ int bt_private_event_class_set_specific_context_field_class( "%!+F", field_class); stream_class = bt_event_class_borrow_stream_class_inline( event_class); - trace = bt_stream_class_borrow_trace_inline(stream_class); - resolve_ctx.packet_header = trace->packet_header_fc; + trace_class = bt_stream_class_borrow_trace_class_inline(stream_class); + resolve_ctx.packet_header = trace_class->packet_header_fc; resolve_ctx.packet_context = stream_class->packet_context_fc; resolve_ctx.event_header = stream_class->event_header_fc; resolve_ctx.event_common_context = @@ -330,9 +312,10 @@ int bt_private_event_class_set_specific_context_field_class( goto end; } - bt_field_class_make_part_of_trace(field_class); + bt_field_class_make_part_of_trace_class(field_class); bt_object_put_ref(event_class->specific_context_fc); - event_class->specific_context_fc = bt_object_get_ref(field_class); + event_class->specific_context_fc = field_class; + bt_object_get_no_null_check(event_class->specific_context_fc); bt_field_class_freeze(field_class); BT_LIB_LOGV("Set event class's specific context field classe: %!+E", event_class); @@ -341,29 +324,20 @@ end: return ret; } -struct bt_field_class *bt_event_class_borrow_payload_field_class( - struct bt_event_class *event_class) +const struct bt_field_class *bt_event_class_borrow_payload_field_class_const( + const struct bt_event_class *event_class) { BT_ASSERT_PRE_NON_NULL(event_class, "Event class"); return event_class->payload_fc; } -struct bt_private_field_class *bt_private_event_class_borrow_payload_field_class( - struct bt_private_event_class *event_class) -{ - return (void *) bt_event_class_borrow_payload_field_class( - (void *) event_class); -} - -int bt_private_event_class_set_payload_field_class( - struct bt_private_event_class *priv_event_class, - struct bt_private_field_class *priv_field_class) +int bt_event_class_set_payload_field_class( + struct bt_event_class *event_class, + struct bt_field_class *field_class) { int ret; - struct bt_event_class *event_class = (void *) priv_event_class; - struct bt_field_class *field_class = (void *) priv_field_class; struct bt_stream_class *stream_class; - struct bt_trace *trace; + struct bt_trace_class *trace_class; struct bt_resolve_field_path_context resolve_ctx = { .packet_header = NULL, .packet_context = NULL, @@ -382,8 +356,8 @@ int bt_private_event_class_set_payload_field_class( field_class); stream_class = bt_event_class_borrow_stream_class_inline( event_class); - trace = bt_stream_class_borrow_trace_inline(stream_class); - resolve_ctx.packet_header = trace->packet_header_fc; + trace_class = bt_stream_class_borrow_trace_class_inline(stream_class); + resolve_ctx.packet_header = trace_class->packet_header_fc; resolve_ctx.packet_context = stream_class->packet_context_fc; resolve_ctx.event_header = stream_class->event_header_fc; resolve_ctx.event_common_context = @@ -395,9 +369,10 @@ int bt_private_event_class_set_payload_field_class( goto end; } - bt_field_class_make_part_of_trace(field_class); + bt_field_class_make_part_of_trace_class(field_class); bt_object_put_ref(event_class->payload_fc); - event_class->payload_fc = bt_object_get_ref(field_class); + event_class->payload_fc = field_class; + bt_object_get_no_null_check(event_class->payload_fc); bt_field_class_freeze(field_class); BT_LIB_LOGV("Set event class's payload field classe: %!+E", event_class); @@ -406,10 +381,10 @@ end: } BT_HIDDEN -void _bt_event_class_freeze(struct bt_event_class *event_class) +void _bt_event_class_freeze(const struct bt_event_class *event_class) { /* The field classes are already frozen */ BT_ASSERT(event_class); BT_LIB_LOGD("Freezing event class: %!+E", event_class); - event_class->frozen = true; + ((struct bt_event_class *) event_class)->frozen = true; }