Cleanup: Missing whitespace
[lttng-tools.git] / src / common / config / config.c
index 4a07e99479adb7b0c7ddd0a1db434587f24aea1b..86b1be8b5c41c218cc2f6252188410e2ce2a741e 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #define _GNU_SOURCE
+#define _LGPL_SOURCE
 #include <assert.h>
 #include <ctype.h>
 #include <stdio.h>
@@ -118,6 +119,7 @@ const char * const config_domain_type_kernel = "KERNEL";
 const char * const config_domain_type_ust = "UST";
 const char * const config_domain_type_jul = "JUL";
 const char * const config_domain_type_log4j = "LOG4J";
+const char * const config_domain_type_python = "PYTHON";
 
 const char * const config_buffer_type_per_pid = "PER_PID";
 const char * const config_buffer_type_per_uid = "PER_UID";
@@ -752,6 +754,8 @@ int get_domain_type(xmlChar *domain)
                ret = LTTNG_DOMAIN_JUL;
        } else if (!strcmp((char *) domain, config_domain_type_log4j)) {
                ret = LTTNG_DOMAIN_LOG4J;
+       } else if (!strcmp((char *) domain, config_domain_type_python)) {
+               ret = LTTNG_DOMAIN_PYTHON;
        } else {
                goto error;
        }
@@ -1280,7 +1284,7 @@ int create_session(const char *name,
                int i;
                struct lttng_domain *domain;
                struct lttng_domain *domains[] =
-                       { kernel_domain, ust_domain, jul_domain, log4j_domain};
+                       { kernel_domain, ust_domain, jul_domain, log4j_domain };
 
                /* network destination */
                if (live_timer_interval && live_timer_interval != UINT64_MAX) {
@@ -1636,6 +1640,24 @@ int process_event_node(xmlNodePtr event_node, struct lttng_handle *handle,
 
        ret = lttng_enable_event_with_exclusions(handle, &event, channel_name,
                        filter_expression, exclusion_count, exclusions);
+       if (ret) {
+               goto end;
+       }
+
+       if (!event.enabled) {
+               /*
+                * Note that we should use lttng_disable_event_ext() (2.6+) to
+                * eliminate the risk of clashing on events of the same
+                * name (with different event types and loglevels).
+                *
+                * Unfortunately, lttng_disable_event_ext() only performs a
+                * match on the name and event type and errors out if any other
+                * event attribute is not set to its default value.
+                *
+                * This will disable all events that match this name.
+                */
+               ret = lttng_disable_event(handle, event.name, channel_name);
+       }
 end:
        for (i = 0; i < exclusion_count; i++) {
                free(exclusions[i]);
@@ -1960,7 +1982,9 @@ int process_context_node(xmlNodePtr context_node,
                xmlNodePtr perf_attr_node;
 
                /* perf */
-               context.ctx = LTTNG_EVENT_CONTEXT_PERF_COUNTER;
+               context.ctx = handle->domain.type == LTTNG_DOMAIN_KERNEL ?
+                       LTTNG_EVENT_CONTEXT_PERF_CPU_COUNTER :
+                       LTTNG_EVENT_CONTEXT_PERF_THREAD_COUNTER;
                for (perf_attr_node = xmlFirstElementChild(context_child_node);
                        perf_attr_node; perf_attr_node =
                                xmlNextElementSibling(perf_attr_node)) {
@@ -2152,6 +2176,7 @@ int process_session_node(xmlNodePtr session_node, const char *session_name,
        struct lttng_domain *ust_domain = NULL;
        struct lttng_domain *jul_domain = NULL;
        struct lttng_domain *log4j_domain = NULL;
+       struct lttng_domain *python_domain = NULL;
 
        for (node = xmlFirstElementChild(session_node); node;
                node = xmlNextElementSibling(node)) {
@@ -2285,6 +2310,13 @@ int process_session_node(xmlNodePtr session_node, const char *session_name,
                        }
                        log4j_domain = domain;
                        break;
+               case LTTNG_DOMAIN_PYTHON:
+                       if (python_domain) {
+                               /* Same domain seen twice, invalid! */
+                               goto domain_init_error;
+                       }
+                       python_domain = domain;
+                       break;
                default:
                        WARN("Invalid domain type");
                        goto domain_init_error;
@@ -2347,6 +2379,7 @@ error:
        free(ust_domain);
        free(jul_domain);
        free(log4j_domain);
+       free(python_domain);
        free(name);
        return ret;
 }
This page took 0.024713 seconds and 4 git commands to generate.