X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=ltt-sessiond%2Fust-app.h;h=fe6ac8418748e9b1f0a27db414c51db6d1fdeda4;hb=48842b309b2000205367409c0f29ca40ec3e251c;hp=f2d3d261c2a07394b79c55f7bc5e906f4bf68606;hpb=56fff0907d3a752030f384e6037d16ea7978de71;p=lttng-tools.git diff --git a/ltt-sessiond/ust-app.h b/ltt-sessiond/ust-app.h index f2d3d261c..fe6ac8418 100644 --- a/ltt-sessiond/ust-app.h +++ b/ltt-sessiond/ust-app.h @@ -16,8 +16,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef _TRACEABLE_APP_H -#define _TRACEABLE_APP_H +#ifndef _LTT_UST_APP_H +#define _LTT_UST_APP_H #include #include @@ -38,52 +38,128 @@ struct ust_register_msg { }; /* - * Traceable application list. + * Global applications HT used by the session daemon. */ -struct ust_app_list{ - /* - * This lock protects any read/write access to the list and count (which is - * basically the list size). All public functions in traceable-app.c - * acquire this lock and release it before returning. If none of those - * functions are used, the lock MUST be acquired in order to iterate or/and - * do any actions on that list. - */ - pthread_mutex_t lock; - - /* - * Number of element in the list. The session list lock MUST be acquired if - * this counter is used when iterating over the session list. - */ - unsigned int count; - - /* Linked list head */ - struct cds_list_head head; +struct cds_lfht *ust_app_ht; + +struct cds_lfht *ust_app_sock_key_map; + +struct ust_app_key { + pid_t pid; + int sock; + struct cds_lfht_node node; +}; + +struct ust_app_event { + int enabled; + int handle; + struct object_data *obj; + char name[LTTNG_UST_SYM_NAME_LEN]; + struct cds_lfht *ctx; + struct cds_lfht_node node; +}; + +struct ust_app_channel { + int enabled; + int handle; + char name[LTTNG_UST_SYM_NAME_LEN]; + struct lttng_ust_channel attr; + struct object_data *obj; + struct cds_lfht *streams; + struct cds_lfht *ctx; + struct cds_lfht *events; + struct cds_lfht_node node; +}; + +struct ust_app_session { + int enabled; + int handle; /* Used has unique identifier */ + unsigned int uid; + struct ltt_ust_metadata *metadata; + struct object_data *obj; + struct cds_lfht *channels; /* Registered channels */ + struct cds_lfht_node node; }; -/* Registered traceable applications. Libust registers to the session daemon +/* + * Registered traceable applications. Libust registers to the session daemon * and a linked list is kept of all running traceable app. */ struct ust_app { - int sock; /* Communication socket with the application */ - pid_t pid; pid_t ppid; uid_t uid; /* User ID that owns the apps */ gid_t gid; /* Group ID that owns the apps */ uint32_t v_major; /* Verion major number */ uint32_t v_minor; /* Verion minor number */ char name[17]; /* Process name (short) */ - struct ltt_ust_channel_list channels; - struct cds_list_head list; + struct cds_lfht *sessions; + struct cds_lfht_node node; + struct ust_app_key key; }; +#ifdef CONFIG_LTTNG_TOOLS_HAVE_UST + int ust_app_register(struct ust_register_msg *msg, int sock); void ust_app_unregister(int sock); -unsigned int ust_app_list_count(void); +int ust_app_add_channel(struct ltt_ust_session *usess, + struct ltt_ust_channel *uchan); +int ust_app_add_event(struct ltt_ust_session *usess, + struct ltt_ust_channel *uchan, struct ltt_ust_event *uevent); +unsigned long ust_app_list_count(void); +int ust_app_start_trace(struct ltt_ust_session *usess); -void ust_app_lock_list(void); -void ust_app_unlock_list(void); void ust_app_clean_list(void); -struct ust_app_list *ust_app_get_list(void); -struct ust_app *ust_app_get_by_pid(pid_t pid); +void ust_app_ht_alloc(void); +struct cds_lfht *ust_app_get_ht(void); +struct ust_app *ust_app_find_by_pid(pid_t pid); + +#else + +static inline +int ust_app_register(struct ust_register_msg *msg, int sock) +{ + return -ENOSYS; +} +static inline +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) +{ +} +static inline +void ust_app_unlock_list(void) +{ +} +static inline +void ust_app_clean_list(void) +{ +} +static inline +struct ust_app_list *ust_app_get_list(void) +{ + return NULL; +} +static inline +struct ust_app *ust_app_get_by_pid(pid_t pid) +{ + return NULL; +} + +static inline +int ust_app_add_channel(struct ltt_ust_session *usess, + struct ltt_ust_channel *uchan) +{ + return 0; +} + +#endif /* CONFIG_LTTNG_TOOLS_HAVE_UST */ -#endif /* _TRACEABLE_APP_H */ +#endif /* _LTT_UST_APP_H */