#include <common/hashtable/hashtable.h>
#include <common/compat/uuid.h>
-#include "ust-ctl.h"
+#include "lttng-ust-ctl.h"
#define CTF_SPEC_MAJOR 1
#define CTF_SPEC_MINOR 8
size_t metadata_len, metadata_alloc_len;
/* Length of bytes sent to the consumer. */
size_t metadata_len_sent;
+ /* Current version of the metadata. */
+ uint64_t metadata_version;
+ /*
+ * Those fields are only used when a session is created with
+ * the --shm-path option. In this case, the metadata is output
+ * twice: once to the consumer, as ususal, but a second time
+ * also in the shm path directly. This is done so that a copy
+ * of the metadata that is as fresh as possible is available
+ * on the event of a crash.
+ *
+ * root_shm_path contains the shm-path provided by the user, along with
+ * the session's name and timestamp:
+ * e.g. /tmp/my_shm/my_session-20180612-135822
+ *
+ * shm_path contains the full path of the memory buffers:
+ * e.g. /tmp/my_shm/my_session-20180612-135822/ust/uid/1000/64-bit
+ *
+ * metadata_path contains the full path to the metadata file that
+ * is kept for the "crash buffer" extraction:
+ * e.g. /tmp/my_shm/my_session-20180612-135822/ust/uid/1000/64-bit/metadata
+ *
+ * Note that this is not the trace's final metadata file. It is
+ * only meant to be used to read the contents of the ring buffers
+ * in the event of a crash.
+ *
+ * metadata_fd is a file descriptor that points to the file at
+ * 'metadata_path'.
+ */
char root_shm_path[PATH_MAX];
char shm_path[PATH_MAX];
char metadata_path[PATH_MAX];
/* Enumerations table. */
struct lttng_ht *enums;
+
+ /*
+ * Copy of the tracer version when the first app is registered.
+ * It is used if we need to regenerate the metadata.
+ */
+ uint32_t major;
+ uint32_t minor;
+
+ /* The id of the parent session */
+ uint64_t tracing_id;
+ uid_t tracing_uid;
};
struct ust_registry_channel {
uint64_t key;
+ uint64_t consumer_key;
/* Id set when replying to a register channel. */
uint32_t chan_id;
enum ustctl_channel_header header_type;
int ust_registry_channel_add(struct ust_registry_session *session,
uint64_t key);
void ust_registry_channel_del_free(struct ust_registry_session *session,
- uint64_t key);
+ uint64_t key, bool notif);
int ust_registry_session_init(struct ust_registry_session **sessionp,
struct ust_app *app,
const char *root_shm_path,
const char *shm_path,
uid_t euid,
- gid_t egid);
+ gid_t egid,
+ uint64_t tracing_id,
+ uid_t tracing_uid);
void ust_registry_session_destroy(struct ust_registry_session *session);
int ust_registry_create_event(struct ust_registry_session *session,
}
static inline
void ust_registry_channel_del_free(struct ust_registry_session *session,
- uint64_t key)
+ uint64_t key, bool notif)
{}
static inline
int ust_registry_session_init(struct ust_registry_session **sessionp,
uint32_t uint32_t_alignment,
uint32_t uint64_t_alignment,
uint32_t long_alignment,
- int byte_order)
+ int byte_order,
+ uint32_t major,
+ uint32_t minor,
+ const char *root_shm_path,
+ const char *shm_path,
+ uid_t euid,
+ gid_t egid,
+ uint64_t tracing_id,
+ uid_t tracing_uid)
{
return 0;
}
/* The app object can be NULL for registry shared across applications. */
static inline
int ust_metadata_session_statedump(struct ust_registry_session *session,
- struct ust_app *app)
+ struct ust_app *app, uint32_t major, uint32_t minor)
{
return 0;
}