X-Git-Url: https://git.lttng.org/?p=lttng-modules.git;a=blobdiff_plain;f=src%2Flttng-events.c;h=2c007ad4d339fe2570b088c95a11920291aae603;hp=842beac1d6844377da47778dc7f41625b6b06cac;hb=8c0393c3679b2f047a723b23e012188b064797d4;hpb=fc66bf6a911e374789389f465c653c0c33b4c197 diff --git a/src/lttng-events.c b/src/lttng-events.c index 842beac1..2c007ad4 100644 --- a/src/lttng-events.c +++ b/src/lttng-events.c @@ -185,22 +185,30 @@ struct lttng_kernel_session *lttng_session_create(void) INIT_HLIST_HEAD(&session_priv->events_ht.table[i]); list_add(&session_priv->list, &sessions); - session->pid_tracker.session = session; - session->pid_tracker.tracker_type = TRACKER_PID; - session->vpid_tracker.session = session; - session->vpid_tracker.tracker_type = TRACKER_VPID; - session->uid_tracker.session = session; - session->uid_tracker.tracker_type = TRACKER_UID; - session->vuid_tracker.session = session; - session->vuid_tracker.tracker_type = TRACKER_VUID; - session->gid_tracker.session = session; - session->gid_tracker.tracker_type = TRACKER_GID; - session->vgid_tracker.session = session; - session->vgid_tracker.tracker_type = TRACKER_VGID; + if (lttng_id_tracker_init(&session->pid_tracker, session, TRACKER_PID)) + goto tracker_alloc_error; + if (lttng_id_tracker_init(&session->vpid_tracker, session, TRACKER_VPID)) + goto tracker_alloc_error; + if (lttng_id_tracker_init(&session->uid_tracker, session, TRACKER_UID)) + goto tracker_alloc_error; + if (lttng_id_tracker_init(&session->vuid_tracker, session, TRACKER_VUID)) + goto tracker_alloc_error; + if (lttng_id_tracker_init(&session->gid_tracker, session, TRACKER_GID)) + goto tracker_alloc_error; + if (lttng_id_tracker_init(&session->vgid_tracker, session, TRACKER_VGID)) + goto tracker_alloc_error; + mutex_unlock(&sessions_mutex); return session; +tracker_alloc_error: + lttng_id_tracker_fini(&session->pid_tracker); + lttng_id_tracker_fini(&session->vpid_tracker); + lttng_id_tracker_fini(&session->uid_tracker); + lttng_id_tracker_fini(&session->vuid_tracker); + lttng_id_tracker_fini(&session->gid_tracker); + lttng_id_tracker_fini(&session->vgid_tracker); err_free_cache: kfree(metadata_cache); err_free_session_private: @@ -376,12 +384,12 @@ void lttng_session_destroy(struct lttng_kernel_session *session) list_for_each_entry(metadata_stream, &session->priv->metadata_cache->metadata_stream, list) _lttng_metadata_channel_hangup(metadata_stream); mutex_unlock(&session->priv->metadata_cache->lock); - lttng_id_tracker_destroy(&session->pid_tracker, false); - lttng_id_tracker_destroy(&session->vpid_tracker, false); - lttng_id_tracker_destroy(&session->uid_tracker, false); - lttng_id_tracker_destroy(&session->vuid_tracker, false); - lttng_id_tracker_destroy(&session->gid_tracker, false); - lttng_id_tracker_destroy(&session->vgid_tracker, false); + lttng_id_tracker_fini(&session->pid_tracker); + lttng_id_tracker_fini(&session->vpid_tracker); + lttng_id_tracker_fini(&session->uid_tracker); + lttng_id_tracker_fini(&session->vuid_tracker); + lttng_id_tracker_fini(&session->gid_tracker); + lttng_id_tracker_fini(&session->vgid_tracker); kref_put(&session->priv->metadata_cache->refcount, metadata_cache_destroy); list_del(&session->priv->list); mutex_unlock(&sessions_mutex); @@ -1644,7 +1652,7 @@ void _lttng_event_destroy(struct lttng_kernel_event_common *event) } } -struct lttng_id_tracker *get_tracker(struct lttng_kernel_session *session, +struct lttng_kernel_id_tracker *get_tracker(struct lttng_kernel_session *session, enum tracker_type tracker_type) { switch (tracker_type) { @@ -1669,7 +1677,7 @@ struct lttng_id_tracker *get_tracker(struct lttng_kernel_session *session, int lttng_session_track_id(struct lttng_kernel_session *session, enum tracker_type tracker_type, int id) { - struct lttng_id_tracker *tracker; + struct lttng_kernel_id_tracker *tracker; int ret; tracker = get_tracker(session, tracker_type); @@ -1692,7 +1700,7 @@ int lttng_session_track_id(struct lttng_kernel_session *session, int lttng_session_untrack_id(struct lttng_kernel_session *session, enum tracker_type tracker_type, int id) { - struct lttng_id_tracker *tracker; + struct lttng_kernel_id_tracker *tracker; int ret; tracker = get_tracker(session, tracker_type); @@ -1714,8 +1722,8 @@ int lttng_session_untrack_id(struct lttng_kernel_session *session, static void *id_list_start(struct seq_file *m, loff_t *pos) { - struct lttng_id_tracker *id_tracker = m->private; - struct lttng_id_tracker_rcu *id_tracker_p = id_tracker->p; + struct lttng_kernel_id_tracker *id_tracker = m->private; + struct lttng_kernel_id_tracker_rcu *id_tracker_p = id_tracker->p; struct lttng_id_hash_node *e; int iter = 0, i; @@ -1744,8 +1752,8 @@ void *id_list_start(struct seq_file *m, loff_t *pos) static void *id_list_next(struct seq_file *m, void *p, loff_t *ppos) { - struct lttng_id_tracker *id_tracker = m->private; - struct lttng_id_tracker_rcu *id_tracker_p = id_tracker->p; + struct lttng_kernel_id_tracker *id_tracker = m->private; + struct lttng_kernel_id_tracker_rcu *id_tracker_p = id_tracker->p; struct lttng_id_hash_node *e; int iter = 0, i; @@ -1779,8 +1787,8 @@ void id_list_stop(struct seq_file *m, void *p) static int id_list_show(struct seq_file *m, void *p) { - struct lttng_id_tracker *id_tracker = m->private; - struct lttng_id_tracker_rcu *id_tracker_p = id_tracker->p; + struct lttng_kernel_id_tracker *id_tracker = m->private; + struct lttng_kernel_id_tracker_rcu *id_tracker_p = id_tracker->p; int id; if (p == id_tracker_p) { @@ -1791,7 +1799,7 @@ int id_list_show(struct seq_file *m, void *p) id = lttng_id_tracker_get_node_id(e); } - switch (id_tracker->tracker_type) { + switch (id_tracker->priv->tracker_type) { case TRACKER_PID: seq_printf(m, "process { pid = %d; };\n", id); break; @@ -1834,13 +1842,13 @@ static int lttng_tracker_ids_list_release(struct inode *inode, struct file *file) { struct seq_file *m = file->private_data; - struct lttng_id_tracker *id_tracker = m->private; + struct lttng_kernel_id_tracker *id_tracker = m->private; int ret; WARN_ON_ONCE(!id_tracker); ret = seq_release(inode, file); if (!ret) - fput(id_tracker->session->priv->file); + fput(id_tracker->priv->session->priv->file); return ret; }