X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Ftrace.c;h=f5c66cb8332d22087d6ac4f1a0e5ccbd77542bde;hb=238b7404b66983c6ba15c3a44bfbf642f20bdabe;hp=02c18cc6203a2ca9ac491ee0a039584c81f887e2;hpb=65300d60e4b4f167e5fc8f584677757ce09a3844;p=babeltrace.git diff --git a/lib/trace-ir/trace.c b/lib/trace-ir/trace.c index 02c18cc6..f5c66cb8 100644 --- a/lib/trace-ir/trace.c +++ b/lib/trace-ir/trace.c @@ -1,8 +1,4 @@ /* - * trace.c - * - * Babeltrace trace IR - Trace - * * Copyright 2014 Jérémie Galarneau * * Author: Jérémie Galarneau @@ -30,6 +26,7 @@ #include #include +#include #include #include #include @@ -46,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -58,8 +56,8 @@ #include struct bt_trace_is_static_listener_elem { - bt_trace_is_static_listener func; - bt_trace_listener_removed removed; + bt_private_trace_is_static_listener func; + bt_private_trace_listener_removed removed; void *data; }; @@ -86,11 +84,12 @@ void destroy_trace(struct bt_object *obj) struct bt_trace_is_static_listener_elem, i); if (elem.removed) { - elem.removed(trace, elem.data); + elem.removed((void *) trace, elem.data); } } g_array_free(trace->is_static_listeners, TRUE); + trace->is_static_listeners = NULL; } bt_object_pool_finalize(&trace->packet_header_field_pool); @@ -98,28 +97,35 @@ void destroy_trace(struct bt_object *obj) if (trace->environment) { BT_LOGD_STR("Destroying environment attributes."); bt_attributes_destroy(trace->environment); + trace->environment = NULL; } if (trace->name.str) { g_string_free(trace->name.str, TRUE); + trace->name.str = NULL; + trace->name.value = NULL; } if (trace->streams) { BT_LOGD_STR("Destroying streams."); g_ptr_array_free(trace->streams, TRUE); + trace->streams = NULL; } if (trace->stream_classes) { BT_LOGD_STR("Destroying stream classes."); g_ptr_array_free(trace->stream_classes, TRUE); + trace->stream_classes = NULL; } if (trace->stream_classes_stream_count) { g_hash_table_destroy(trace->stream_classes_stream_count); + trace->stream_classes_stream_count = NULL; } BT_LOGD_STR("Putting packet header field classe."); bt_object_put_ref(trace->packet_header_fc); + trace->packet_header_fc = NULL; g_free(trace); } @@ -130,7 +136,7 @@ void free_packet_header_field(struct bt_field_wrapper *field_wrapper, bt_field_wrapper_destroy(field_wrapper); } -struct bt_trace *bt_trace_create(void) +struct bt_private_trace *bt_private_trace_create(void) { struct bt_trace *trace = NULL; int ret; @@ -201,7 +207,7 @@ error: BT_OBJECT_PUT_REF_AND_RESET(trace); end: - return trace; + return (void *) trace; } const char *bt_trace_get_name(struct bt_trace *trace) @@ -210,8 +216,11 @@ const char *bt_trace_get_name(struct bt_trace *trace) return trace->name.value; } -int bt_trace_set_name(struct bt_trace *trace, const char *name) +int bt_private_trace_set_name(struct bt_private_trace *priv_trace, + const char *name) { + struct bt_trace *trace = (void *) priv_trace; + BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_NON_NULL(name, "Name"); BT_ASSERT_PRE_TRACE_HOT(trace); @@ -227,33 +236,32 @@ bt_uuid bt_trace_get_uuid(struct bt_trace *trace) return trace->uuid.value; } -int bt_trace_set_uuid(struct bt_trace *trace, bt_uuid uuid) +void bt_private_trace_set_uuid(struct bt_private_trace *priv_trace, + bt_uuid uuid) { + struct bt_trace *trace = (void *) priv_trace; + BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_NON_NULL(uuid, "UUID"); BT_ASSERT_PRE_TRACE_HOT(trace); memcpy(trace->uuid.uuid, uuid, BABELTRACE_UUID_LEN); trace->uuid.value = trace->uuid.uuid; BT_LIB_LOGV("Set trace's UUID: %!+t", trace); - return 0; } BT_ASSERT_FUNC static bool trace_has_environment_entry(struct bt_trace *trace, const char *name) { - struct bt_value *attribute; - BT_ASSERT(trace); - attribute = bt_attributes_borrow_field_value_by_name( - trace->environment, name); - return attribute != NULL; + return bt_attributes_borrow_field_value_by_name( + trace->environment, name) != NULL; } static int set_environment_entry(struct bt_trace *trace, const char *name, - struct bt_value *value) + struct bt_private_value *value) { int ret; @@ -266,7 +274,7 @@ int set_environment_entry(struct bt_trace *trace, const char *name, "%![trace-]+t, entry-name=\"%s\"", trace, name); ret = bt_attributes_set_field_value(trace->environment, name, value); - bt_value_freeze(value); + bt_value_freeze(bt_private_value_borrow_value(value)); if (ret) { BT_LIB_LOGE("Cannot set trace's environment entry: " "%![trace-]+t, entry-name=\"%s\"", trace, name); @@ -278,16 +286,18 @@ int set_environment_entry(struct bt_trace *trace, const char *name, return ret; } -int bt_trace_set_environment_entry_string(struct bt_trace *trace, +int bt_private_trace_set_environment_entry_string( + struct bt_private_trace *priv_trace, const char *name, const char *value) { int ret; - struct bt_value *value_obj; + struct bt_private_value *value_obj; + struct bt_trace *trace = (void *) priv_trace; BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_NON_NULL(name, "Name"); BT_ASSERT_PRE_NON_NULL(value, "Value"); - value_obj = bt_value_string_create_init(value); + value_obj = bt_private_value_string_create_init(value); if (!value_obj) { BT_LOGE_STR("Cannot create a string value object."); ret = -1; @@ -302,15 +312,17 @@ end: return ret; } -int bt_trace_set_environment_entry_integer( - struct bt_trace *trace, const char *name, int64_t value) +int bt_private_trace_set_environment_entry_integer( + struct bt_private_trace *priv_trace, + const char *name, int64_t value) { int ret; - struct bt_value *value_obj; + struct bt_private_value *value_obj; + struct bt_trace *trace = (void *) priv_trace; BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_NON_NULL(name, "Name"); - value_obj = bt_value_integer_create_init(value); + value_obj = bt_private_value_integer_create_init(value); if (!value_obj) { BT_LOGE_STR("Cannot create an integer value object."); ret = -1; @@ -344,19 +356,37 @@ void bt_trace_borrow_environment_entry_by_index( BT_ASSERT_PRE_NON_NULL(value, "Value"); BT_ASSERT_PRE_VALID_INDEX(index, bt_attributes_get_count(trace->environment)); - *value = bt_attributes_borrow_field_value(trace->environment, index); + *value = bt_private_value_borrow_value( + bt_attributes_borrow_field_value(trace->environment, index)); BT_ASSERT(*value); *name = bt_attributes_get_field_name(trace->environment, index); BT_ASSERT(*name); } +void bt_private_trace_borrow_environment_entry_by_index( + struct bt_private_trace *trace, uint64_t index, + const char **name, struct bt_private_value **value) +{ + bt_trace_borrow_environment_entry_by_index((void *) trace, + index, name, (void *) value); +} + struct bt_value *bt_trace_borrow_environment_entry_value_by_name( struct bt_trace *trace, const char *name) { BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_NON_NULL(name, "Name"); - return bt_attributes_borrow_field_value_by_name(trace->environment, - name); + return bt_private_value_borrow_value( + bt_attributes_borrow_field_value_by_name(trace->environment, + name)); +} + +struct bt_private_value * +bt_private_trace_borrow_environment_entry_value_by_name( + struct bt_private_trace *trace, const char *name) +{ + return (void *) bt_trace_borrow_environment_entry_value_by_name( + (void *) trace, name); } uint64_t bt_trace_get_stream_count(struct bt_trace *trace) @@ -373,6 +403,12 @@ struct bt_stream *bt_trace_borrow_stream_by_index( return g_ptr_array_index(trace->streams, index); } +struct bt_private_stream *bt_private_trace_borrow_stream_by_index( + struct bt_private_trace *trace, uint64_t index) +{ + return (void *) bt_trace_borrow_stream_by_index((void *) trace, index); +} + struct bt_stream *bt_trace_borrow_stream_by_id( struct bt_trace *trace, uint64_t id) { @@ -395,6 +431,12 @@ end: return stream; } +struct bt_private_stream *bt_private_trace_borrow_private_stream_by_id( + struct bt_private_trace *trace, uint64_t id) +{ + return (void *) bt_trace_borrow_stream_by_id((void *) trace, id); +} + uint64_t bt_trace_get_stream_class_count(struct bt_trace *trace) { BT_ASSERT_PRE_NON_NULL(trace, "Trace"); @@ -409,6 +451,14 @@ struct bt_stream_class *bt_trace_borrow_stream_class_by_index( return g_ptr_array_index(trace->stream_classes, index); } +struct bt_private_stream_class * +bt_private_trace_borrow_stream_class_by_index( + struct bt_private_trace *trace, uint64_t index) +{ + return (void *) bt_trace_borrow_stream_class_by_index( + (void *) trace, index); +} + struct bt_stream_class *bt_trace_borrow_stream_class_by_id( struct bt_trace *trace, uint64_t id) { @@ -431,6 +481,13 @@ end: return stream_class; } +struct bt_private_stream_class * +bt_private_trace_borrow_stream_class_by_id( + struct bt_private_trace *trace, uint64_t id) +{ + return (void *) bt_trace_borrow_stream_class_by_id((void *) trace, id); +} + struct bt_field_class *bt_trace_borrow_packet_header_field_class( struct bt_trace *trace) { @@ -438,10 +495,13 @@ struct bt_field_class *bt_trace_borrow_packet_header_field_class( return trace->packet_header_fc; } -int bt_trace_set_packet_header_field_class(struct bt_trace *trace, - struct bt_field_class *field_class) +int bt_private_trace_set_packet_header_field_class( + struct bt_private_trace *priv_trace, + struct bt_private_field_class *priv_field_class) { int ret; + struct bt_trace *trace = (void *) priv_trace; + struct bt_field_class *field_class = (void *) priv_field_class; struct bt_resolve_field_path_context resolve_ctx = { .packet_header = field_class, .packet_context = NULL, @@ -479,8 +539,9 @@ bt_bool bt_trace_is_static(struct bt_trace *trace) return (bt_bool) trace->is_static; } -int bt_trace_make_static(struct bt_trace *trace) +int bt_private_trace_make_static(struct bt_private_trace *priv_trace) { + struct bt_trace *trace = (void *) priv_trace; uint64_t i; BT_ASSERT_PRE_NON_NULL(trace, "Trace"); @@ -495,18 +556,20 @@ int bt_trace_make_static(struct bt_trace *trace) struct bt_trace_is_static_listener_elem, i); if (elem.func) { - elem.func(trace, elem.data); + elem.func((void *) trace, elem.data); } } return 0; } -int bt_trace_add_is_static_listener(struct bt_trace *trace, - bt_trace_is_static_listener listener, - bt_trace_listener_removed listener_removed, void *data, +int bt_private_trace_add_is_static_listener( + struct bt_private_trace *priv_trace, + bt_private_trace_is_static_listener listener, + bt_private_trace_listener_removed listener_removed, void *data, uint64_t *listener_id) { + struct bt_trace *trace = (void *) priv_trace; uint64_t i; struct bt_trace_is_static_listener_elem new_elem = { .func = listener, @@ -558,9 +621,10 @@ bool has_listener_id(struct bt_trace *trace, uint64_t listener_id) listener_id))->func != NULL; } -int bt_trace_remove_is_static_listener( - struct bt_trace *trace, uint64_t listener_id) +int bt_private_trace_remove_is_static_listener( + struct bt_private_trace *priv_trace, uint64_t listener_id) { + struct bt_trace *trace = (void *) priv_trace; struct bt_trace_is_static_listener_elem *elem; BT_ASSERT_PRE_NON_NULL(trace, "Trace"); @@ -583,7 +647,7 @@ int bt_trace_remove_is_static_listener( "%![trace-]+t, listener-id=%" PRIu64, trace, listener_id); trace->in_remove_listener = true; - elem->removed(trace, elem->data); + elem->removed((void *) trace, elem->data); trace->in_remove_listener = false; } @@ -611,15 +675,16 @@ bt_bool bt_trace_assigns_automatic_stream_class_id(struct bt_trace *trace) return (bt_bool) trace->assigns_automatic_stream_class_id; } -int bt_trace_set_assigns_automatic_stream_class_id( - struct bt_trace *trace, bt_bool value) +void bt_private_trace_set_assigns_automatic_stream_class_id( + struct bt_private_trace *priv_trace, bt_bool value) { + struct bt_trace *trace = (void *) priv_trace; + BT_ASSERT_PRE_NON_NULL(trace, "Trace"); BT_ASSERT_PRE_TRACE_HOT(trace); trace->assigns_automatic_stream_class_id = (bool) value; BT_LIB_LOGV("Set trace's automatic stream class ID " "assignment property: %!+t", trace); - return 0; } BT_HIDDEN