X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ftrace-ust.h;h=87fe412d6b862ed0c5eed27af988c55affbdabbd;hp=f5fa092629d60e7030ac0b92aba0d943228268ab;hb=7972aab22f74b18faa168c0482216a3dd711a075;hpb=45893984238b2e2c12fc0d84b90336c98a6d98c9 diff --git a/src/bin/lttng-sessiond/trace-ust.h b/src/bin/lttng-sessiond/trace-ust.h index f5fa09262..87fe412d6 100644 --- a/src/bin/lttng-sessiond/trace-ust.h +++ b/src/bin/lttng-sessiond/trace-ust.h @@ -51,6 +51,7 @@ struct ltt_ust_event { /* UST channel */ struct ltt_ust_channel { + uint64_t id; /* unique id per session. */ unsigned int enabled; char name[LTTNG_UST_SYM_NAME_LEN]; char pathname[PATH_MAX]; @@ -72,20 +73,7 @@ struct ltt_ust_metadata { /* UST domain global (LTTNG_DOMAIN_UST) */ struct ltt_ust_domain_global { struct lttng_ht *channels; -}; - -/* UST domain pid (LTTNG_DOMAIN_UST_PID) */ -struct ltt_ust_domain_pid { - pid_t pid; - struct lttng_ht *channels; - struct lttng_ht_node_ulong node; -}; - -/* UST domain exec name (LTTNG_DOMAIN_UST_EXEC_NAME) */ -struct ltt_ust_domain_exec { - char exec_name[LTTNG_UST_SYM_NAME_LEN]; - struct lttng_ht *channels; - struct lttng_ht_node_str node; + struct cds_list_head registry_buffer_uid_list; }; /* UST session */ @@ -94,13 +82,6 @@ struct ltt_ust_session { int start_trace; char pathname[PATH_MAX]; struct ltt_ust_domain_global domain_global; - /* - * Those two hash tables contains data for a specific UST domain and each - * contains a HT of channels. See ltt_ust_domain_exec and - * ltt_ust_domain_pid data structures. - */ - struct lttng_ht *domain_pid; - struct lttng_ht *domain_exec; /* UID/GID of the user owning the session */ uid_t uid; gid_t gid; @@ -114,8 +95,47 @@ struct ltt_ust_session { struct consumer_output *tmp_consumer; /* Sequence number for filters so the tracer knows the ordering. */ uint64_t filter_seq_num; + /* This indicates which type of buffer this session is set for. */ + enum lttng_buffer_type buffer_type; + /* If set to 1, the buffer_type can not be changed anymore. */ + int buffer_type_changed; + /* For per UID buffer, every buffer reg object is kept of this session */ + struct cds_list_head buffer_reg_uid_list; + /* Next channel ID available for a newly registered channel. */ + uint64_t next_channel_id; + /* Once this value reaches UINT32_MAX, no more id can be allocated. */ + uint64_t used_channel_id; }; +/* + * Validate that the id has reached the maximum allowed or not. + * + * Return 0 if NOT else 1. + */ +static inline int trace_ust_is_max_id(uint64_t id) +{ + return (id == UINT64_MAX) ? 1 : 0; +} + +/* + * Return next available channel id and increment the used counter. The + * trace_ust_is_max_id function MUST be called before in order to validate if + * the maximum number of IDs have been reached. If not, it is safe to call this + * function. + * + * Return a unique channel ID. If max is reached, the used_channel_id counter + * is returned. + */ +static inline uint64_t trace_ust_get_next_chan_id(struct ltt_ust_session *s) +{ + if (trace_ust_is_max_id(s->used_channel_id)) { + return s->used_channel_id; + } + + s->used_channel_id++; + return s->next_channel_id++; +} + #ifdef HAVE_LIBLTTNG_UST_CTL int trace_ust_ht_match_event(struct cds_lfht_node *node, const void *_key);