X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Fust-events-internal.h;h=d79278d7ec513958c1032c4db9c1497bb827cd5d;hb=e7bc0ef6c86ae97886cf5f8b28854cf281d4962b;hp=5466f25e2216e9eefc961a14e7dd1463e2858e44;hpb=a084756d092167324ee09d3f819cc45407b58233;p=lttng-ust.git diff --git a/liblttng-ust/ust-events-internal.h b/liblttng-ust/ust-events-internal.h index 5466f25e..d79278d7 100644 --- a/liblttng-ust/ust-events-internal.h +++ b/liblttng-ust/ust-events-internal.h @@ -76,7 +76,7 @@ struct lttng_enabler { struct lttng_event_enabler { struct lttng_enabler base; struct cds_list_head node; /* per-session list of enablers */ - struct lttng_channel *chan; + struct lttng_ust_channel_buffer *chan; /* * Unused, but kept around to make it explicit that the tracer can do * it. @@ -316,10 +316,12 @@ struct lttng_enum { uint64_t id; /* Enumeration ID in sessiond */ }; +struct lttng_ust_shm_handle; + struct lttng_ust_channel_ops_private { struct lttng_ust_channel_ops *pub; /* Public channels ops interface */ - struct lttng_channel *(*channel_create)(const char *name, + struct lttng_ust_channel_buffer *(*channel_create)(const char *name, void *buf_addr, size_t subbuf_size, size_t num_subbuf, unsigned int switch_timer_interval, @@ -328,7 +330,7 @@ struct lttng_ust_channel_ops_private { uint32_t chan_id, const int *stream_fds, int nr_stream_fds, int64_t blocking_timeout); - void (*channel_destroy)(struct lttng_channel *chan); + void (*channel_destroy)(struct lttng_ust_channel_buffer *chan); /* * packet_avail_size returns the available size in the current * packet. Note that the size returned is only a hint, since it @@ -342,6 +344,50 @@ struct lttng_ust_channel_ops_private { struct lttng_ust_shm_handle *handle); }; +struct lttng_ust_channel_common_private { + struct lttng_ust_channel_common *pub; /* Public channel interface */ + + int objd; /* Object associated with channel. */ + int tstate:1; /* Transient enable state */ +}; + +struct lttng_ust_channel_buffer_private { + struct lttng_ust_channel_common_private parent; + + struct lttng_ust_channel_buffer *pub; /* Public channel buffer interface */ + struct cds_list_head node; /* Channel list in session */ + int header_type; /* 0: unset, 1: compact, 2: large */ + unsigned int id; /* Channel ID */ + enum lttng_ust_abi_chan_type type; + unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */ +}; + +/* + * IMPORTANT: this structure is part of the ABI between the consumer + * daemon and the UST library within traced applications. Changing it + * breaks the UST communication protocol. + * + * TODO: remove unused fields on next UST communication protocol + * breaking update. + */ +struct lttng_ust_abi_channel_config { + void *unused1; + int unused2; + void *unused3; + void *unused4; + int unused5; + struct cds_list_head unused6; + void *unused7; + int unused8; + void *unused9; + + /* Channel ID */ + unsigned int id; + enum lttng_ust_abi_chan_type unused10; + unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */ + int unused11:1; +}; + static inline struct lttng_ust_type_integer *lttng_ust_get_type_integer(struct lttng_ust_type_common *type) { @@ -466,6 +512,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_enum *enum_type = (struct lttng_ust_type_enum *) type; lttng_ust_destroy_type(enum_type->container_type); + free(enum_type); break; } case lttng_ust_type_array: @@ -473,6 +520,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_array *array_type = (struct lttng_ust_type_array *) type; lttng_ust_destroy_type(array_type->elem_type); + free(array_type); break; } case lttng_ust_type_sequence: @@ -480,6 +528,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) struct lttng_ust_type_sequence *sequence_type = (struct lttng_ust_type_sequence *) type; lttng_ust_destroy_type(sequence_type->elem_type); + free(sequence_type); break; } case lttng_ust_type_struct: @@ -489,6 +538,7 @@ void lttng_ust_destroy_type(struct lttng_ust_type_common *type) for (i = 0; i < struct_type->nr_fields; i++) lttng_ust_destroy_type(struct_type->fields[i]->type); + free(struct_type); break; } default: @@ -520,7 +570,7 @@ __attribute__((visibility("hidden"))) struct lttng_event_enabler *lttng_event_enabler_create( enum lttng_enabler_format_type format_type, struct lttng_ust_abi_event *event_param, - struct lttng_channel *chan); + struct lttng_ust_channel_buffer *chan); /* * Destroy a `struct lttng_event_enabler` object. @@ -757,21 +807,10 @@ __attribute__((visibility("hidden"))) void lttng_handle_pending_statedump(void *owner); __attribute__((visibility("hidden"))) -struct lttng_channel *lttng_channel_create(struct lttng_ust_session *session, - const char *transport_name, - void *buf_addr, - size_t subbuf_size, size_t num_subbuf, - unsigned int switch_timer_interval, - unsigned int read_timer_interval, - int **shm_fd, int **wait_fd, - uint64_t **memory_map_size, - struct lttng_channel *chan_priv_init); - -__attribute__((visibility("hidden"))) -int lttng_channel_enable(struct lttng_channel *channel); +int lttng_channel_enable(struct lttng_ust_channel_common *lttng_channel); __attribute__((visibility("hidden"))) -int lttng_channel_disable(struct lttng_channel *channel); +int lttng_channel_disable(struct lttng_ust_channel_common *lttng_channel); __attribute__((visibility("hidden"))) void lttng_transport_register(struct lttng_transport *transport); @@ -816,4 +855,10 @@ void lttng_ust_abi_events_exit(void); __attribute__((visibility("hidden"))) void lttng_ust_abi_objd_table_owner_cleanup(void *owner); +__attribute__((visibility("hidden"))) +struct lttng_ust_channel_buffer *lttng_ust_alloc_channel_buffer(void); + +__attribute__((visibility("hidden"))) +void lttng_ust_free_channel_common(struct lttng_ust_channel_common *chan); + #endif /* _LTTNG_UST_EVENTS_INTERNAL_H */