X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=ltt-sessiond%2Fsession.h;h=bbbbffc4554d3aaa6e0dd5abf56da6d1aa6c738c;hp=00e8ef1e7b230e3ae2f62c97dfd6593c94f44c03;hb=54d01ffb43587b221dc50ec42b6070fad89bd255;hpb=1657e9bb835a28e66396deac871270fe373d5ff4 diff --git a/ltt-sessiond/session.h b/ltt-sessiond/session.h index 00e8ef1e7..bbbbffc45 100644 --- a/ltt-sessiond/session.h +++ b/ltt-sessiond/session.h @@ -3,8 +3,8 @@ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * as published by the Free Software Foundation; only version 2 + * of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,35 +19,66 @@ #ifndef _LTT_SESSION_H #define _LTT_SESSION_H -#include -#include +#include +#include -/* Global session list */ +#include "trace-kernel.h" +#include "trace-ust.h" + +/* + * Tracing session list + * + * Statically declared in session.c and can be accessed by using + * session_get_list() function that returns the pointer to the list. + */ struct ltt_session_list { + /* + * This lock protects any read/write access to the list and count (which is + * basically the list size). All public functions in session.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; }; -/* ltt-session - This data structure contains information needed - * to identify a tracing session for both LTTng and UST. +/* + * This data structure contains information needed to identify a tracing + * session for both LTTng and UST. */ struct ltt_session { char *name; + char *path; + struct ltt_kernel_session *kernel_session; + struct ltt_ust_session_list ust_session_list; + /* + * Protect any read/write on this session data structure. This lock must be + * acquired *before* using any public functions declared below. Use + * session_lock() and session_unlock() for that. + */ + pthread_mutex_t lock; struct cds_list_head list; - uuid_t uuid; - struct cds_list_head ust_traces; - struct cds_list_head kernel_traces; - unsigned int ust_trace_count; - unsigned int kern_trace_count; - pid_t ust_consumer; - pid_t kernel_consumer; }; /* Prototypes */ -int create_session(char *name, uuid_t *session_id); -int destroy_session(uuid_t *uuid); -void get_lttng_session(struct lttng_session *lt); -struct ltt_session *find_session_by_uuid(uuid_t session_id); -struct ltt_session *find_session_by_name(char *name); -unsigned int get_session_count(void); +int session_create(char *name, char *path); +int session_destroy(char *name); + +void session_lock(struct ltt_session *session); +void session_lock_list(void); +void session_unlock(struct ltt_session *session); +void session_unlock_list(void); + +struct ltt_session *session_find_by_name(char *name); +struct ltt_session_list *session_get_list(void); #endif /* _LTT_SESSION_H */