* 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 <stdint.h>
#include <urcu/list.h>
};
/*
- * 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
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
-
-#endif /* _TRACEABLE_APP_H */
+#endif /* _LTT_UST_APP_H */