Fix: sessiond: fix -Wshadow error in save.c
[lttng-tools.git] / src / bin / lttng-sessiond / save.c
index 59715d0b9d4324152641ff7b620112ad9f62bad1..249d3030254e58f1883d06f9aebab09ecf3dfc1e 100644 (file)
@@ -1,18 +1,8 @@
 /*
- * Copyright (C) 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright (C) 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License, version 2 only, as
- * published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
  *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
 #define _LGPL_SOURCE
@@ -144,7 +134,7 @@ end:
 /* Return LTTNG_OK on success else a LTTNG_ERR* code. */
 static
 int save_ust_channel_attributes(struct config_writer *writer,
-       struct lttng_ust_channel_attr *attr)
+       struct lttng_ust_abi_channel_attr *attr)
 {
        int ret;
        struct ltt_ust_channel *channel = NULL;
@@ -191,7 +181,7 @@ int save_ust_channel_attributes(struct config_writer *writer,
 
        ret = config_writer_write_element_string(writer,
                config_element_output_type,
-               attr->output == LTTNG_UST_MMAP ?
+               attr->output == LTTNG_UST_ABI_MMAP ?
                config_output_type_mmap : config_output_type_splice);
        if (ret) {
                ret = LTTNG_ERR_SAVE_IO_FAIL;
@@ -332,6 +322,9 @@ const char *get_kernel_context_type_string(
        case LTTNG_KERNEL_CONTEXT_PID_NS:
                context_type_string = config_event_context_pid_ns;
                break;
+       case LTTNG_KERNEL_CONTEXT_TIME_NS:
+               context_type_string = config_event_context_time_ns;
+               break;
        case LTTNG_KERNEL_CONTEXT_USER_NS:
                context_type_string = config_event_context_user_ns;
                break;
@@ -383,69 +376,72 @@ const char *get_kernel_context_type_string(
 
 static
 const char *get_ust_context_type_string(
-       enum lttng_ust_context_type context_type)
+       enum lttng_ust_abi_context_type context_type)
 {
        const char *context_type_string;
 
        switch (context_type) {
-       case LTTNG_UST_CONTEXT_PROCNAME:
+       case LTTNG_UST_ABI_CONTEXT_PROCNAME:
                context_type_string = config_event_context_procname;
                break;
-       case LTTNG_UST_CONTEXT_VPID:
+       case LTTNG_UST_ABI_CONTEXT_VPID:
                context_type_string = config_event_context_vpid;
                break;
-       case LTTNG_UST_CONTEXT_VTID:
+       case LTTNG_UST_ABI_CONTEXT_VTID:
                context_type_string = config_event_context_vtid;
                break;
-       case LTTNG_UST_CONTEXT_IP:
+       case LTTNG_UST_ABI_CONTEXT_IP:
                context_type_string = config_event_context_ip;
                break;
-       case LTTNG_UST_CONTEXT_PTHREAD_ID:
+       case LTTNG_UST_ABI_CONTEXT_PTHREAD_ID:
                context_type_string = config_event_context_pthread_id;
                break;
-       case LTTNG_UST_CONTEXT_APP_CONTEXT:
+       case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT:
                context_type_string = config_event_context_app;
                break;
-       case LTTNG_UST_CONTEXT_CGROUP_NS:
+       case LTTNG_UST_ABI_CONTEXT_CGROUP_NS:
                context_type_string = config_event_context_cgroup_ns;
                break;
-       case LTTNG_UST_CONTEXT_IPC_NS:
+       case LTTNG_UST_ABI_CONTEXT_IPC_NS:
                context_type_string = config_event_context_ipc_ns;
                break;
-       case LTTNG_UST_CONTEXT_MNT_NS:
+       case LTTNG_UST_ABI_CONTEXT_MNT_NS:
                context_type_string = config_event_context_mnt_ns;
                break;
-       case LTTNG_UST_CONTEXT_NET_NS:
+       case LTTNG_UST_ABI_CONTEXT_NET_NS:
                context_type_string = config_event_context_net_ns;
                break;
-       case LTTNG_UST_CONTEXT_PID_NS:
+       case LTTNG_UST_ABI_CONTEXT_TIME_NS:
+               context_type_string = config_event_context_time_ns;
+               break;
+       case LTTNG_UST_ABI_CONTEXT_PID_NS:
                context_type_string = config_event_context_pid_ns;
                break;
-       case LTTNG_UST_CONTEXT_USER_NS:
+       case LTTNG_UST_ABI_CONTEXT_USER_NS:
                context_type_string = config_event_context_user_ns;
                break;
-       case LTTNG_UST_CONTEXT_UTS_NS:
+       case LTTNG_UST_ABI_CONTEXT_UTS_NS:
                context_type_string = config_event_context_uts_ns;
                break;
-       case LTTNG_UST_CONTEXT_VUID:
+       case LTTNG_UST_ABI_CONTEXT_VUID:
                context_type_string = config_event_context_vuid;
                break;
-       case LTTNG_UST_CONTEXT_VEUID:
+       case LTTNG_UST_ABI_CONTEXT_VEUID:
                context_type_string = config_event_context_veuid;
                break;
-       case LTTNG_UST_CONTEXT_VSUID:
+       case LTTNG_UST_ABI_CONTEXT_VSUID:
                context_type_string = config_event_context_vsuid;
                break;
-       case LTTNG_UST_CONTEXT_VGID:
+       case LTTNG_UST_ABI_CONTEXT_VGID:
                context_type_string = config_event_context_vgid;
                break;
-       case LTTNG_UST_CONTEXT_VEGID:
+       case LTTNG_UST_ABI_CONTEXT_VEGID:
                context_type_string = config_event_context_vegid;
                break;
-       case LTTNG_UST_CONTEXT_VSGID:
+       case LTTNG_UST_ABI_CONTEXT_VSGID:
                context_type_string = config_event_context_vsgid;
                break;
-       case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
+       case LTTNG_UST_ABI_CONTEXT_PERF_THREAD_COUNTER:
                /*
                 * Error, should not be stored in the XML, perf contexts
                 * are stored as a node of type event_perf_context_type.
@@ -483,18 +479,18 @@ const char *get_buffer_type_string(
 
 static
 const char *get_loglevel_type_string(
-       enum lttng_ust_loglevel_type loglevel_type)
+       enum lttng_ust_abi_loglevel_type loglevel_type)
 {
        const char *loglevel_type_string;
 
        switch (loglevel_type) {
-       case LTTNG_UST_LOGLEVEL_ALL:
+       case LTTNG_UST_ABI_LOGLEVEL_ALL:
                loglevel_type_string = config_loglevel_type_all;
                break;
-       case LTTNG_UST_LOGLEVEL_RANGE:
+       case LTTNG_UST_ABI_LOGLEVEL_RANGE:
                loglevel_type_string = config_loglevel_type_range;
                break;
-       case LTTNG_UST_LOGLEVEL_SINGLE:
+       case LTTNG_UST_ABI_LOGLEVEL_SINGLE:
                loglevel_type_string = config_loglevel_type_single;
                break;
        default:
@@ -1055,7 +1051,7 @@ int save_ust_event(struct config_writer *writer,
                goto end;
        }
 
-       if (event->attr.instrumentation != LTTNG_UST_TRACEPOINT) {
+       if (event->attr.instrumentation != LTTNG_UST_ABI_TRACEPOINT) {
                ERR("Unsupported UST instrumentation type.");
                ret = LTTNG_ERR_INVALID;
                goto end;
@@ -1083,7 +1079,7 @@ int save_ust_event(struct config_writer *writer,
        }
 
        /* The log level is irrelevant if no "filtering" is enabled */
-       if (event->attr.loglevel_type != LTTNG_UST_LOGLEVEL_ALL) {
+       if (event->attr.loglevel_type != LTTNG_UST_ABI_LOGLEVEL_ALL) {
                ret = config_writer_write_element_signed_int(writer,
                                config_element_loglevel, event->attr.loglevel);
                if (ret) {
@@ -1192,10 +1188,10 @@ int init_ust_event_from_agent_event(struct ltt_ust_event *ust_event,
                struct agent_event *agent_event)
 {
        int ret;
-       enum lttng_ust_loglevel_type ust_loglevel_type;
+       enum lttng_ust_abi_loglevel_type ust_loglevel_type;
 
-       ust_event->enabled = agent_event->enabled;
-       ust_event->attr.instrumentation = LTTNG_UST_TRACEPOINT;
+       ust_event->enabled = AGENT_EVENT_IS_ENABLED(agent_event);
+       ust_event->attr.instrumentation = LTTNG_UST_ABI_TRACEPOINT;
        if (lttng_strncpy(ust_event->attr.name, agent_event->name,
                        LTTNG_SYMBOL_NAME_LEN)) {
                ret = LTTNG_ERR_INVALID;
@@ -1203,13 +1199,13 @@ int init_ust_event_from_agent_event(struct ltt_ust_event *ust_event,
        }
        switch (agent_event->loglevel_type) {
        case LTTNG_EVENT_LOGLEVEL_ALL:
-               ust_loglevel_type = LTTNG_UST_LOGLEVEL_ALL;
+               ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_ALL;
                break;
        case LTTNG_EVENT_LOGLEVEL_SINGLE:
-               ust_loglevel_type = LTTNG_UST_LOGLEVEL_SINGLE;
+               ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_SINGLE;
                break;
        case LTTNG_EVENT_LOGLEVEL_RANGE:
-               ust_loglevel_type = LTTNG_UST_LOGLEVEL_RANGE;
+               ust_loglevel_type = LTTNG_UST_ABI_LOGLEVEL_RANGE;
                break;
        default:
                ERR("Invalid agent_event loglevel_type.");
@@ -1244,7 +1240,6 @@ int save_agent_events(struct config_writer *writer,
 
        rcu_read_lock();
        cds_lfht_for_each_entry(agent->events->ht, &iter.iter, node, node) {
-               int ret;
                struct agent_event *agent_event;
                struct ltt_ust_event fake_event;
 
@@ -1555,10 +1550,10 @@ int save_ust_context(struct config_writer *writer,
                }
 
                switch (ctx->ctx.ctx) {
-               case LTTNG_UST_CONTEXT_PERF_THREAD_COUNTER:
+               case LTTNG_UST_ABI_CONTEXT_PERF_THREAD_COUNTER:
                        ret = save_ust_context_perf_thread_counter(writer, ctx);
                        break;
-               case LTTNG_UST_CONTEXT_APP_CONTEXT:
+               case LTTNG_UST_ABI_CONTEXT_APP_CONTEXT:
                        ret = save_ust_context_app_ctx(writer, ctx);
                        break;
                default:
@@ -1830,46 +1825,47 @@ const char *get_config_domain_str(enum lttng_domain_type domain)
 }
 
 /* Return LTTNG_OK on success else a LTTNG_ERR* code. */
-static int save_id_tracker(struct config_writer *writer,
+static int save_process_attr_tracker(struct config_writer *writer,
                struct ltt_session *sess,
                int domain,
-               enum lttng_tracker_type tracker_type)
+               enum lttng_process_attr process_attr)
 {
        int ret = LTTNG_OK;
-       ssize_t nr_ids = 0, i;
-       struct lttng_tracker_id *ids = NULL;
        const char *element_id_tracker, *element_target_id, *element_id;
-
-       switch (tracker_type) {
-       case LTTNG_TRACKER_PID:
-               element_id_tracker = config_element_pid_tracker;
-               element_target_id = config_element_target_pid;
-               element_id = config_element_pid;
-               break;
-       case LTTNG_TRACKER_VPID:
-               element_id_tracker = config_element_vpid_tracker;
-               element_target_id = config_element_target_vpid;
-               element_id = config_element_id;
-               break;
-       case LTTNG_TRACKER_UID:
-               element_id_tracker = config_element_uid_tracker;
-               element_target_id = config_element_target_uid;
-               element_id = config_element_id;
-               break;
-       case LTTNG_TRACKER_VUID:
-               element_id_tracker = config_element_vuid_tracker;
-               element_target_id = config_element_target_vuid;
-               element_id = config_element_id;
-               break;
-       case LTTNG_TRACKER_GID:
-               element_id_tracker = config_element_gid_tracker;
-               element_target_id = config_element_target_gid;
-               element_id = config_element_id;
-               break;
-       case LTTNG_TRACKER_VGID:
-               element_id_tracker = config_element_vgid_tracker;
-               element_target_id = config_element_target_vgid;
-               element_id = config_element_id;
+       const struct process_attr_tracker *tracker;
+       enum lttng_tracking_policy tracking_policy;
+       struct lttng_process_attr_values *values = NULL;
+
+       switch (process_attr) {
+       case LTTNG_PROCESS_ATTR_PROCESS_ID:
+               element_id_tracker = config_element_process_attr_tracker_pid;
+               element_target_id = config_element_process_attr_pid_value;
+               element_id = config_element_process_attr_id;
+               break;
+       case LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID:
+               element_id_tracker = config_element_process_attr_tracker_vpid;
+               element_target_id = config_element_process_attr_vpid_value;
+               element_id = config_element_process_attr_id;
+               break;
+       case LTTNG_PROCESS_ATTR_USER_ID:
+               element_id_tracker = config_element_process_attr_tracker_uid;
+               element_target_id = config_element_process_attr_uid_value;
+               element_id = config_element_process_attr_id;
+               break;
+       case LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID:
+               element_id_tracker = config_element_process_attr_tracker_vuid;
+               element_target_id = config_element_process_attr_vuid_value;
+               element_id = config_element_process_attr_id;
+               break;
+       case LTTNG_PROCESS_ATTR_GROUP_ID:
+               element_id_tracker = config_element_process_attr_tracker_gid;
+               element_target_id = config_element_process_attr_gid_value;
+               element_id = config_element_process_attr_id;
+               break;
+       case LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID:
+               element_id_tracker = config_element_process_attr_tracker_vgid;
+               element_target_id = config_element_process_attr_vgid_value;
+               element_id = config_element_process_attr_id;
                break;
        default:
                ret = LTTNG_ERR_SAVE_IO_FAIL;
@@ -1879,33 +1875,28 @@ static int save_id_tracker(struct config_writer *writer,
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
        {
-               nr_ids = kernel_list_tracker_ids(
-                               tracker_type, sess->kernel_session, &ids);
-               if (nr_ids < 0) {
-                       ret = LTTNG_ERR_KERN_LIST_FAIL;
-                       goto end;
-               }
+               tracker = kernel_get_process_attr_tracker(
+                               sess->kernel_session, process_attr);
+               assert(tracker);
                break;
        }
        case LTTNG_DOMAIN_UST:
        {
-               nr_ids = trace_ust_list_tracker_ids(
-                               tracker_type, sess->ust_session, &ids);
-               if (nr_ids < 0) {
-                       ret = LTTNG_ERR_UST_LIST_FAIL;
-                       goto end;
-               }
+               tracker = trace_ust_get_process_attr_tracker(
+                               sess->ust_session, process_attr);
+               assert(tracker);
                break;
        }
        case LTTNG_DOMAIN_JUL:
        case LTTNG_DOMAIN_LOG4J:
        case LTTNG_DOMAIN_PYTHON:
        default:
-               ret = LTTNG_ERR_UNKNOWN_DOMAIN;
+               ret = LTTNG_ERR_UNSUPPORTED_DOMAIN;
                goto end;
        }
 
-       if (nr_ids == 1 && ids[0].type == LTTNG_ID_ALL) {
+       tracking_policy = process_attr_tracker_get_tracking_policy(tracker);
+       if (tracking_policy == LTTNG_TRACKING_POLICY_INCLUDE_ALL) {
                /* Tracking all, nothing to output. */
                ret = LTTNG_OK;
                goto end;
@@ -1917,57 +1908,75 @@ static int save_id_tracker(struct config_writer *writer,
                goto end;
        }
 
-       ret = config_writer_open_element(writer, config_element_targets);
+       ret = config_writer_open_element(
+                       writer, config_element_process_attr_values);
        if (ret) {
                ret = LTTNG_ERR_SAVE_IO_FAIL;
                goto end;
        }
 
-       if (nr_ids == 0) {
-               /* Tracking none: empty list. */
-               ret = config_writer_open_element(writer, element_target_id);
-               if (ret) {
-                       ret = LTTNG_ERR_SAVE_IO_FAIL;
-                       goto end;
-               }
+       if (tracking_policy == LTTNG_TRACKING_POLICY_INCLUDE_SET) {
+               unsigned int i, count;
+               enum process_attr_tracker_status status =
+                               process_attr_tracker_get_inclusion_set(
+                                               tracker, &values);
 
-               /* /$element_target_id */
-               ret = config_writer_close_element(writer);
-               if (ret) {
-                       ret = LTTNG_ERR_SAVE_IO_FAIL;
+               if (status != PROCESS_ATTR_TRACKER_STATUS_OK) {
+                       ret = LTTNG_ERR_NOMEM;
                        goto end;
                }
-       } else {
-               /* Tracking list. */
-               for (i = 0; i < nr_ids; i++) {
-                       switch (ids[i].type) {
-                       case LTTNG_ID_VALUE:
-                               ret = config_writer_open_element(
-                                               writer, element_target_id);
-                               if (ret) {
-                                       ret = LTTNG_ERR_SAVE_IO_FAIL;
-                                       goto end;
-                               }
-                               ret = config_writer_write_element_unsigned_int(
-                                               writer, element_id,
-                                               ids[i].value);
+
+               count = _lttng_process_attr_values_get_count(values);
+
+               for (i = 0; i < count; i++) {
+                       unsigned int integral_value = UINT_MAX;
+                       const char *name = NULL;
+                       const struct process_attr_value *value =
+                                       lttng_process_attr_tracker_values_get_at_index(
+                                                       values, i);
+
+                       assert(value);
+                       ret = config_writer_open_element(
+                                       writer, element_target_id);
+                       if (ret) {
+                               ret = LTTNG_ERR_SAVE_IO_FAIL;
+                               goto end;
+                       }
+
+                       switch (value->type) {
+                       case LTTNG_PROCESS_ATTR_VALUE_TYPE_PID:
+                               integral_value =
+                                               (unsigned int) value->value.pid;
                                break;
-                       case LTTNG_ID_STRING:
-                               ret = config_writer_open_element(
-                                               writer, element_target_id);
-                               if (ret) {
-                                       ret = LTTNG_ERR_SAVE_IO_FAIL;
-                                       goto end;
-                               }
-                               ret = config_writer_write_element_string(writer,
-                                               config_element_name,
-                                               ids[i].string);
+                       case LTTNG_PROCESS_ATTR_VALUE_TYPE_UID:
+                               integral_value =
+                                               (unsigned int) value->value.uid;
+                               break;
+                       case LTTNG_PROCESS_ATTR_VALUE_TYPE_GID:
+                               integral_value =
+                                               (unsigned int) value->value.gid;
+                               break;
+                       case LTTNG_PROCESS_ATTR_VALUE_TYPE_USER_NAME:
+                               name = value->value.user_name;
+                               assert(name);
+                               break;
+                       case LTTNG_PROCESS_ATTR_VALUE_TYPE_GROUP_NAME:
+                               name = value->value.group_name;
+                               assert(name);
                                break;
                        default:
-                               /* Unexpected. */
-                               ret = LTTNG_ERR_SAVE_IO_FAIL;
-                               goto end;
+                               abort();
                        }
+
+                       if (name) {
+                               ret = config_writer_write_element_string(writer,
+                                               config_element_name, name);
+                       } else {
+                               ret = config_writer_write_element_unsigned_int(
+                                               writer, element_id,
+                                               integral_value);
+                       }
+
                        if (ret) {
                                ret = LTTNG_ERR_SAVE_IO_FAIL;
                                goto end;
@@ -1982,7 +1991,7 @@ static int save_id_tracker(struct config_writer *writer,
                }
        }
 
-       /* /targets */
+       /* /values */
        ret = config_writer_close_element(writer);
        if (ret) {
                ret = LTTNG_ERR_SAVE_IO_FAIL;
@@ -1998,12 +2007,12 @@ static int save_id_tracker(struct config_writer *writer,
 
        ret = LTTNG_OK;
 end:
-       free(ids);
+       lttng_process_attr_values_destroy(values);
        return ret;
 }
 
 /* Return LTTNG_OK on success else a LTTNG_ERR* code. */
-static int save_id_trackers(struct config_writer *writer,
+static int save_process_attr_trackers(struct config_writer *writer,
                struct ltt_session *sess,
                int domain)
 {
@@ -2011,40 +2020,61 @@ static int save_id_trackers(struct config_writer *writer,
 
        switch (domain) {
        case LTTNG_DOMAIN_KERNEL:
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_PID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VPID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_UID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VUID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_GID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VGID);
-               if (ret != LTTNG_OK)
-                       return ret;
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_PROCESS_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_USER_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_GROUP_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
                break;
        case LTTNG_DOMAIN_UST:
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VPID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VUID);
-               if (ret != LTTNG_OK)
-                       return ret;
-               ret = save_id_tracker(writer, sess, domain, LTTNG_TRACKER_VGID);
-               if (ret != LTTNG_OK)
-                       return ret;
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_PROCESS_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_USER_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
+               ret = save_process_attr_tracker(writer, sess, domain,
+                               LTTNG_PROCESS_ATTR_VIRTUAL_GROUP_ID);
+               if (ret != LTTNG_OK) {
+                       goto end;
+               }
                break;
        default:
-               return LTTNG_ERR_INVALID;
+               ret = LTTNG_ERR_INVALID;
+               goto end;
        }
-       return LTTNG_OK;
+       ret = LTTNG_OK;
+end:
+       return ret;
 }
 
 /* Return LTTNG_OK on success else a LTTNG_ERR* code. */
@@ -2125,14 +2155,15 @@ int save_ust_domain(struct config_writer *writer,
        }
 
        if (domain == LTTNG_DOMAIN_UST) {
-               ret = config_writer_open_element(writer,
-                               config_element_trackers);
+               ret = config_writer_open_element(
+                               writer, config_element_process_attr_trackers);
                if (ret) {
                        ret = LTTNG_ERR_SAVE_IO_FAIL;
                        goto end;
                }
 
-               ret = save_id_trackers(writer, session, LTTNG_DOMAIN_UST);
+               ret = save_process_attr_trackers(
+                               writer, session, LTTNG_DOMAIN_UST);
                if (ret != LTTNG_OK) {
                        goto end;
                }
@@ -2189,14 +2220,15 @@ int save_domains(struct config_writer *writer, struct ltt_session *session)
                        goto end;
                }
 
-               ret = config_writer_open_element(writer,
-                       config_element_trackers);
+               ret = config_writer_open_element(
+                               writer, config_element_process_attr_trackers);
                if (ret) {
                        ret = LTTNG_ERR_SAVE_IO_FAIL;
                        goto end;
                }
 
-               ret = save_id_trackers(writer, session, LTTNG_DOMAIN_KERNEL);
+               ret = save_process_attr_trackers(
+                               writer, session, LTTNG_DOMAIN_KERNEL);
                if (ret != LTTNG_OK) {
                        goto end;
                }
@@ -2600,8 +2632,7 @@ int save_session(struct ltt_session *session,
        memset(config_file_path, 0, sizeof(config_file_path));
 
        if (!session_access_ok(session,
-               LTTNG_SOCK_GET_UID_CRED(creds),
-               LTTNG_SOCK_GET_GID_CRED(creds)) || session->destroyed) {
+               LTTNG_SOCK_GET_UID_CRED(creds)) || session->destroyed) {
                ret = LTTNG_ERR_EPERM;
                goto end;
        }
This page took 0.032619 seconds and 4 git commands to generate.