#include <common/common.h>
#include <common/defaults.h>
+#include <common/trace-chunk.h>
#include "buffer-registry.h"
#include "trace-ust.h"
* lock MUST be acquired before calling this.
*/
struct ltt_ust_channel *trace_ust_find_channel_by_name(struct lttng_ht *ht,
- char *name)
+ const char *name)
{
struct lttng_ht_node_str *node;
struct lttng_ht_iter iter;
case LTTNG_EVENT_CONTEXT_APP_CONTEXT:
utype = LTTNG_UST_CONTEXT_APP_CONTEXT;
break;
+ case LTTNG_EVENT_CONTEXT_CGROUP_NS:
+ utype = LTTNG_UST_CONTEXT_CGROUP_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_IPC_NS:
+ utype = LTTNG_UST_CONTEXT_IPC_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_MNT_NS:
+ utype = LTTNG_UST_CONTEXT_MNT_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_NET_NS:
+ utype = LTTNG_UST_CONTEXT_NET_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_PID_NS:
+ utype = LTTNG_UST_CONTEXT_PID_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_USER_NS:
+ utype = LTTNG_UST_CONTEXT_USER_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_UTS_NS:
+ utype = LTTNG_UST_CONTEXT_UTS_NS;
+ break;
+ case LTTNG_EVENT_CONTEXT_VUID:
+ utype = LTTNG_UST_CONTEXT_VUID;
+ break;
+ case LTTNG_EVENT_CONTEXT_VEUID:
+ utype = LTTNG_UST_CONTEXT_VEUID;
+ break;
+ case LTTNG_EVENT_CONTEXT_VSUID:
+ utype = LTTNG_UST_CONTEXT_VSUID;
+ break;
+ case LTTNG_EVENT_CONTEXT_VGID:
+ utype = LTTNG_UST_CONTEXT_VGID;
+ break;
+ case LTTNG_EVENT_CONTEXT_VEGID:
+ utype = LTTNG_UST_CONTEXT_VEGID;
+ break;
+ case LTTNG_EVENT_CONTEXT_VSGID:
+ utype = LTTNG_UST_CONTEXT_VSGID;
+ break;
default:
utype = -1;
break;
/*
* Return 1 if contexts match, 0 otherwise.
*/
-int trace_ust_match_context(struct ltt_ust_context *uctx,
- struct lttng_event_context *ctx)
+int trace_ust_match_context(const struct ltt_ust_context *uctx,
+ const struct lttng_event_context *ctx)
{
int utype;
* Return pointer to structure or NULL.
*/
struct ltt_ust_context *trace_ust_create_context(
- struct lttng_event_context *ctx)
+ const struct lttng_event_context *ctx)
{
struct ltt_ust_context *uctx = NULL;
int utype;
int trace_ust_track_pid(struct ltt_ust_session *session, int pid)
{
int retval = LTTNG_OK;
+ bool should_update_apps = false;
if (pid == -1) {
/* Track all pids: destroy tracker if exists. */
if (session->pid_tracker.ht) {
fini_pid_tracker(&session->pid_tracker);
/* Ensure all apps have session. */
- ust_app_global_update_all(session);
+ should_update_apps = true;
}
} else {
int ret;
goto end;
}
/* Remove all apps from session except pid. */
- ust_app_global_update_all(session);
+ should_update_apps = true;
} else {
struct ust_app *app;
/* Add session to application */
app = ust_app_find_by_pid(pid);
if (app) {
- ust_app_global_update(session, app);
+ should_update_apps = true;
}
}
}
+ if (should_update_apps && session->active) {
+ ust_app_global_update_all(session);
+ }
end:
return retval;
}
}
/*
- * Cleanup ust session structure
+ * Cleanup ust session structure, keeping data required by
+ * destroy notifier.
*
* Should *NOT* be called with RCU read-side lock held.
*/
buffer_reg_uid_destroy(reg, session->consumer);
}
- consumer_output_put(session->consumer);
-
fini_pid_tracker(&session->pid_tracker);
+ lttng_trace_chunk_put(session->current_trace_chunk);
+}
+/* Free elements needed by destroy notifiers. */
+void trace_ust_free_session(struct ltt_ust_session *session)
+{
+ consumer_output_put(session->consumer);
free(session);
}