lttng-ctl: add accessors of userspace probe location to lttng_event
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 15 Oct 2017 20:31:07 +0000 (16:31 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 24 Aug 2018 19:17:22 +0000 (15:17 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/lttng/event.h
src/lib/lttng-ctl/event.c

index b89590dbde01c44d402979afc27d045ea01a0fab..0131defcca2357063585130d20c35113d3a51c48 100644 (file)
@@ -24,6 +24,7 @@ extern "C" {
 #endif
 
 #include <lttng/handle.h>
+#include <lttng/userspace-probe.h>
 
 /*
  * Instrumentation type of tracing event.
@@ -301,6 +302,10 @@ struct lttng_event_field {
 extern int lttng_list_events(struct lttng_handle *handle,
                const char *channel_name, struct lttng_event **events);
 
+extern struct lttng_event *lttng_event_create(void);
+
+extern void lttng_event_destroy(struct lttng_event *event);
+
 /*
  * Get the filter expression of a specific LTTng event.
  *
@@ -333,6 +338,26 @@ extern int lttng_event_get_exclusion_name_count(struct lttng_event *event);
 extern int lttng_event_get_exclusion_name(struct lttng_event *event,
                size_t index, const char **exclusion_name);
 
+
+/*
+ * Get the userspace probe location of a specific LTTng event.
+ * If the call is successful, then a pointer to the probe location is returned.
+ * If the event has no probe location a NULL pointer is returned. The caller
+ * does not own the returned probe location.
+ */
+extern struct lttng_userspace_probe_location *
+lttng_event_get_userspace_probe_location(struct lttng_event *event);
+
+/*
+ * Set an LTTng event's userspace probe location.
+ * If the call is successful, then the probe location is set to the event. The
+ * ownership of the probe_location is given to the event.
+ *
+ * Returns 0 on success, or a negative LTTng error code on error.
+ */
+extern int lttng_event_set_userspace_probe_location(struct lttng_event *event,
+               struct lttng_userspace_probe_location *probe_location);
+
 /*
  * List the available tracepoints of a specific lttng domain.
  *
index 541e37113b53637ebd64c336b8accc29743769c8..691b4f95cd21aa77d22a9da124f0ee2de9a18379 100644 (file)
  */
 
 #define _LGPL_SOURCE
-#include <lttng/event.h>
-#include <lttng/lttng-error.h>
+#include <assert.h>
 #include <stddef.h>
+
+#include <common/error.h>
 #include <common/sessiond-comm/sessiond-comm.h>
+#include <lttng/event-internal.h>
+#include <lttng/event.h>
+#include <lttng/lttng-error.h>
+#include <lttng/userspace-probe-internal.h>
+
+struct lttng_event *lttng_event_create(void)
+{
+       struct lttng_event *event;
+       struct lttng_event_extended *event_extended;
+
+       event = zmalloc(sizeof(*event));
+       if (!event) {
+               PERROR("Error allocating event structure");
+               goto end;
+       }
+
+       event_extended = zmalloc(sizeof(*event_extended));
+       if (!event_extended) {
+               PERROR("Error allocating event extended structure");
+               goto error;
+       }
+       event->extended.ptr = event_extended;
+end:
+       return event;
+error:
+       free(event);
+       goto end;
+}
+
+void lttng_event_destroy(struct lttng_event *event)
+{
+       struct lttng_event_extended *event_extended;
+
+       if (!event) {
+               return;
+       }
+
+       event_extended = (struct lttng_event_extended *) event->extended.ptr;
+
+       if (event_extended) {
+               if (event_extended->probe_location) {
+                       lttng_userspace_probe_location_destroy(
+                               event_extended->probe_location);
+               }
+               free(event_extended);
+       }
+       free(event);
+}
 
 int lttng_event_get_filter_expression(struct lttng_event *event,
        const char **filter_expression)
@@ -118,3 +167,44 @@ int lttng_event_get_exclusion_name(struct lttng_event *event,
 end:
        return ret;
 }
+
+struct lttng_userspace_probe_location *
+lttng_event_get_userspace_probe_location(struct lttng_event *event)
+{
+       struct lttng_userspace_probe_location *probe_location = NULL;
+       struct lttng_event_extended *event_extended;
+
+       if (!event) {
+               goto end;
+       }
+
+       event_extended = (struct lttng_event_extended *) event->extended.ptr;
+       if (!event_extended) {
+               goto end;
+       }
+       probe_location = event_extended->probe_location;
+end:
+       return probe_location;
+}
+
+int lttng_event_set_userspace_probe_location(struct lttng_event *event,
+               struct lttng_userspace_probe_location *probe_location)
+{
+       int ret = 0;
+       struct lttng_event_extended *event_extended;
+
+       if (!event || !probe_location) {
+               ret = -LTTNG_ERR_INVALID;
+               goto end;
+       }
+
+       event_extended = (struct lttng_event_extended *) event->extended.ptr;
+       assert(event_extended);
+       if (event_extended->probe_location) {
+               lttng_userspace_probe_location_destroy(
+                       event_extended->probe_location);
+       }
+       event_extended->probe_location = probe_location;
+end:
+       return ret;
+}
This page took 0.036687 seconds and 4 git commands to generate.