#define _GNU_SOURCE
#include <limits.h>
+#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
* The caller MUST acquire the session list lock before.
* Returns the unique identifier for the session.
*/
-static unsigned int add_session_list(struct ltt_session *ls)
+static uint64_t add_session_list(struct ltt_session *ls)
{
assert(ls);
* Delete session from the session list and free the memory.
*
* Return -1 if no session is found. On success, return 1;
+ * Should *NOT* be called with RCU read-side lock held.
*/
int session_destroy(struct ltt_session *session)
{
del_session_list(session);
pthread_mutex_destroy(&session->lock);
- rcu_read_lock();
consumer_destroy_output(session->consumer);
- rcu_read_unlock();
+ snapshot_destroy(&session->snapshot);
free(session);
return LTTNG_OK;
goto error;
}
+ ret = gethostname(new_session->hostname, sizeof(new_session->hostname));
+ if (ret < 0) {
+ if (errno == ENAMETOOLONG) {
+ new_session->hostname[sizeof(new_session->hostname) - 1] = '\0';
+ } else {
+ ret = LTTNG_ERR_FATAL;
+ goto error;
+ }
+ }
+
/* Init kernel session */
new_session->kernel_session = NULL;
new_session->ust_session = NULL;
new_session->uid = uid;
new_session->gid = gid;
+ ret = snapshot_init(&new_session->snapshot);
+ if (ret < 0) {
+ ret = LTTNG_ERR_NOMEM;
+ goto error;
+ }
+
/* Add new session to the session list */
session_lock_list();
new_session->id = add_session_list(new_session);
* up and, if valid, assign it to the session.
*/
- DBG("Tracing session %s created with ID %u by UID %d GID %d", name,
- new_session->id, new_session->uid, new_session->gid);
+ DBG("Tracing session %s created with ID %" PRIu64 " by UID %d GID %d",
+ name, new_session->id, new_session->uid, new_session->gid);
return LTTNG_OK;