X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-app.h;h=2d3695cef67459315104e0bc5cef9c6f7547f699;hp=82694a722b976ebe494d44d88444512ecadc0aa6;hb=57703f6e0047955a0c68829630fcc42aad988a39;hpb=331744e34f56a5aec69b05d356d6901e67926acc diff --git a/src/bin/lttng-sessiond/ust-app.h b/src/bin/lttng-sessiond/ust-app.h index 82694a722..2d3695cef 100644 --- a/src/bin/lttng-sessiond/ust-app.h +++ b/src/bin/lttng-sessiond/ust-app.h @@ -21,6 +21,8 @@ #include #include + +#include "agent.h" #include "trace-ust.h" #include "ust-registry.h" @@ -48,6 +50,7 @@ struct ust_app_ht_key { const char *name; const struct lttng_ust_filter_bytecode *filter; enum lttng_ust_loglevel_type loglevel; + const struct lttng_ust_event_exclusion *exclusion; }; /* @@ -102,6 +105,7 @@ struct ust_app_ctx { struct lttng_ust_context ctx; struct lttng_ust_object_data *obj; struct lttng_ht_node_ulong node; + struct cds_list_head list; }; struct ust_app_event { @@ -112,6 +116,7 @@ struct ust_app_event { char name[LTTNG_UST_SYM_NAME_LEN]; struct lttng_ht_node_str node; struct lttng_ust_filter_bytecode *filter; + struct lttng_ust_event_exclusion *exclusion; }; struct ust_app_stream { @@ -141,8 +146,17 @@ struct ust_app_channel { struct ust_app_stream_list streams; /* Session pointer that owns this object. */ struct ust_app_session *session; + /* + * Contexts are kept in a hash table for fast lookup and in an ordered list + * so we are able to enable them on the tracer side in the same order the + * user added them. + */ struct lttng_ht *ctx; + struct cds_list_head ctx_list; + struct lttng_ht *events; + uint64_t tracefile_size; + uint64_t tracefile_count; /* * Node indexed by channel name in the channels' hash table of a session. */ @@ -152,6 +166,8 @@ struct ust_app_channel { * ust_objd hash table in the ust_app object. */ struct lttng_ht_node_ulong ust_objd_node; + /* For delayed reclaim */ + struct rcu_head rcu_head; }; struct ust_app_session { @@ -171,10 +187,10 @@ struct ust_app_session { * Tracing session ID. Multiple ust app session can have the same tracing * session id making this value NOT unique to the object. */ - int tracing_id; + uint64_t tracing_id; uint64_t id; /* Unique session identifier */ struct lttng_ht *channels; /* Registered channels */ - struct lttng_ht_node_ulong node; + struct lttng_ht_node_u64 node; char path[PATH_MAX]; /* UID/GID of the application owning the session */ uid_t uid; @@ -191,6 +207,14 @@ struct ust_app_session { enum lttng_buffer_type buffer_type; /* ABI of the session. Same value as the application. */ uint32_t bits_per_long; + /* For delayed reclaim */ + struct rcu_head rcu_head; + /* If the channel's streams have to be outputed or not. */ + unsigned int output_traces; + unsigned int live_timer_interval; /* usec */ + + /* Metadata channel attributes. */ + struct ustctl_consumer_channel_attr metadata_attr; }; /* @@ -242,6 +266,14 @@ struct ust_app { * Hash table containing ust_app_channel indexed by channel objd. */ struct lttng_ht *ust_objd; + + /* + * If this application is of the agent domain and this is non negative then + * a lookup MUST be done to acquire a read side reference to the + * corresponding agent app object. If the lookup fails, this should be set + * to a negative value indicating that the agent application is gone. + */ + int agent_app_sock; }; #ifdef HAVE_LIBLTTNG_UST_CTL @@ -254,9 +286,6 @@ int ust_app_register_done(int sock) } int ust_app_version(struct ust_app *app); void ust_app_unregister(int sock); -unsigned long ust_app_list_count(void); -int ust_app_start_trace(struct ltt_ust_session *usess, struct ust_app *app); -int ust_app_stop_trace(struct ltt_ust_session *usess, struct ust_app *app); int ust_app_start_trace_all(struct ltt_ust_session *usess); int ust_app_stop_trace_all(struct ltt_ust_session *usess); int ust_app_destroy_trace_all(struct ltt_ust_session *usess); @@ -266,9 +295,6 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan); int ust_app_create_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); -int ust_app_disable_event_pid(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent, - pid_t pid); int ust_app_enable_event_pid(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent, pid_t pid); @@ -278,8 +304,6 @@ int ust_app_enable_channel_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan); int ust_app_enable_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); -int ust_app_disable_all_event_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan); int ust_app_enable_all_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan); int ust_app_disable_event_glb(struct ltt_ust_session *usess, @@ -289,8 +313,7 @@ int ust_app_add_ctx_channel_glb(struct ltt_ust_session *usess, void ust_app_global_update(struct ltt_ust_session *usess, int sock); void ust_app_clean_list(void); -void ust_app_ht_alloc(void); -struct lttng_ht *ust_app_get_ht(void); +int ust_app_ht_alloc(void); struct ust_app *ust_app_find_by_pid(pid_t pid); int ust_app_calibrate_glb(struct lttng_ust_calibrate *calibrate); struct ust_app_stream *ust_app_alloc_stream(void); @@ -301,6 +324,17 @@ struct ust_app *ust_app_create(struct ust_register_msg *msg, int sock); void ust_app_notify_sock_unregister(int sock); ssize_t ust_app_push_metadata(struct ust_registry_session *registry, struct consumer_socket *socket, int send_zero_data); +void ust_app_destroy(struct ust_app *app); +int ust_app_snapshot_record(struct ltt_ust_session *usess, + struct snapshot_output *output, int wait, uint64_t max_stream_size); +unsigned int ust_app_get_nb_stream(struct ltt_ust_session *usess); +struct ust_app *ust_app_find_by_sock(int sock); + +static inline +int ust_app_supported(void) +{ + return 1; +} #else /* HAVE_LIBLTTNG_UST_CTL */ @@ -354,11 +388,6 @@ void ust_app_unregister(int sock) { } static inline -unsigned int ust_app_list_count(void) -{ - return 0; -} -static inline void ust_app_lock_list(void) { } @@ -381,11 +410,6 @@ struct ust_app *ust_app_get_by_pid(pid_t pid) return NULL; } static inline -struct lttng_ht *ust_app_get_ht(void) -{ - return NULL; -} -static inline void ust_app_ht_alloc(void) {} static inline @@ -410,12 +434,6 @@ int ust_app_create_channel_glb(struct ltt_ust_session *usess, return 0; } static inline -int ust_app_disable_all_event_glb(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan) -{ - return 0; -} -static inline int ust_app_enable_all_event_glb(struct ltt_ust_session *usess, struct ltt_ust_channel *uchan) { @@ -453,13 +471,6 @@ int ust_app_enable_event_pid(struct ltt_ust_session *usess, return 0; } static inline -int ust_app_disable_event_pid(struct ltt_ust_session *usess, - struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent, - pid_t pid) -{ - return 0; -} -static inline int ust_app_calibrate_glb(struct lttng_ust_calibrate *calibrate) { return 0; @@ -493,6 +504,38 @@ ssize_t ust_app_push_metadata(struct ust_registry_session *registry, { return 0; } +static inline +void ust_app_destroy(struct ust_app *app) +{ + return; +} +static inline +int ust_app_snapshot_record(struct ltt_ust_session *usess, + struct snapshot_output *output, int wait, uint64_t max_stream_size) +{ + return 0; +} +static inline +unsigned int ust_app_get_nb_stream(struct ltt_ust_session *usess) +{ + return 0; +} + +static inline +int ust_app_supported(void) +{ + return 0; +} +static inline +struct ust_app *ust_app_find_by_sock(int sock) +{ + return NULL; +} +static inline +struct ust_app *ust_app_find_by_pid(pid_t pid) +{ + return NULL; +} #endif /* HAVE_LIBLTTNG_UST_CTL */