X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=include%2Flttng%2Flttng-consumer.h;fp=include%2Flttng%2Flttng-consumer.h;h=bba72ee69ec39f82a4b56cf69c65e84c7939b4ab;hp=81fd83e0ff4845574f4ddf3762129a2935bf7138;hb=e4421fecbda445e77b4604d2332014960bfbf695;hpb=886459c6c3217ac70b249e2a717622edd9e7b4dc diff --git a/include/lttng/lttng-consumer.h b/include/lttng/lttng-consumer.h index 81fd83e0f..bba72ee69 100644 --- a/include/lttng/lttng-consumer.h +++ b/include/lttng/lttng-consumer.h @@ -23,8 +23,9 @@ #include #include #include -#include + #include +#include /* * When the receiving thread dies, we need to have a way to make the polling @@ -58,14 +59,6 @@ enum lttng_consumer_stream_state { LTTNG_CONSUMER_DELETE_STREAM, }; -struct lttng_consumer_channel_list { - struct cds_list_head head; -}; - -struct lttng_consumer_stream_list { - struct cds_list_head head; -}; - enum lttng_consumer_type { LTTNG_CONSUMER_UNKNOWN = 0, LTTNG_CONSUMER_KERNEL, @@ -74,7 +67,7 @@ enum lttng_consumer_type { }; struct lttng_consumer_channel { - struct cds_list_head list; + struct lttng_ht_node_ulong node; int key; uint64_t max_sb_size; /* the subbuffer size for this channel */ int refcount; /* Number of streams referencing this channel */ @@ -98,7 +91,7 @@ struct lttng_ust_lib_ring_buffer; * uniquely a stream. */ struct lttng_consumer_stream { - struct cds_list_head list; + struct lttng_ht_node_ulong node; struct lttng_consumer_channel *chan; /* associated channel */ /* * key is the key used by the session daemon to refer to the @@ -187,26 +180,25 @@ struct lttng_consumer_local_data { * Library-level data. One instance per process. */ struct lttng_consumer_global_data { + /* - * consumer_data.lock protects consumer_data.fd_list, - * consumer_data.stream_count, and consumer_data.need_update. It - * ensures the count matches the number of items in the fd_list. - * It ensures the list updates *always* trigger an fd_array - * update (therefore need to make list update vs - * consumer_data.need_update flag update atomic, and also flag - * read, fd array and flag clear atomic). + * At this time, this lock is used to ensure coherence between the count + * and number of element in the hash table. It's also a protection for + * concurrent read/write between threads. Although hash table used are + * lockless data structure, appropriate RCU lock mechanism are not yet + * implemented in the consumer. */ pthread_mutex_t lock; + /* - * Number of streams in the list below. Protected by - * consumer_data.lock. + * Number of streams in the hash table. Protected by consumer_data.lock. */ int stream_count; /* - * Lists of streams and channels. Protected by consumer_data.lock. + * Hash tables of streams and channels. Protected by consumer_data.lock. */ - struct lttng_consumer_stream_list stream_list; - struct lttng_consumer_channel_list channel_list; + struct lttng_ht *stream_ht; + struct lttng_ht *channel_ht; /* * Flag specifying if the local array of FDs needs update in the * poll function. Protected by consumer_data.lock. @@ -215,6 +207,11 @@ struct lttng_consumer_global_data { enum lttng_consumer_type type; }; +/* + * Init consumer data structures. + */ +extern void lttng_consumer_init(void); + /* * Set the error socket for communication with a session daemon. */