event-notifier: implement `lttng_trigger_needs_tracer_notifier()` function
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Thu, 5 Nov 2020 20:22:03 +0000 (15:22 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 18 Mar 2021 15:31:22 +0000 (11:31 -0400)
This function is used to tell if a trigger needs a tracer notifier. This
depends on its condition and its actions.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ie3c928ba1c705c32e4c2e4c6b6b22aa8c10837a9

include/lttng/trigger/trigger-internal.h
src/common/trigger.c

index 21c269befd14b78b26c2aaa3496ed6600d43cf1a..59fe771aa32ef196ef3e89af5c87466dadf5cf21 100644 (file)
@@ -196,4 +196,13 @@ enum lttng_error_code lttng_trigger_generate_bytecode(
 LTTNG_HIDDEN
 struct lttng_trigger *lttng_trigger_copy(const struct lttng_trigger *trigger);
 
 LTTNG_HIDDEN
 struct lttng_trigger *lttng_trigger_copy(const struct lttng_trigger *trigger);
 
+/*
+ * A given trigger needs a tracer notifier if
+ *  it has an event-rule condition,
+ *  AND
+ *  it has one or more sessiond-execution action.
+ */
+LTTNG_HIDDEN
+bool lttng_trigger_needs_tracer_notifier(const struct lttng_trigger *trigger);
+
 #endif /* LTTNG_TRIGGER_INTERNAL_H */
 #endif /* LTTNG_TRIGGER_INTERNAL_H */
index ca082d139ac888b76ed229ab9869fc694c833fa8..ad0d5df1ba9c26644f8ee08bb61245c0d244392b 100644 (file)
@@ -92,7 +92,6 @@ const struct lttng_condition *lttng_trigger_get_const_condition(
        return trigger ? trigger->condition : NULL;
 }
 
        return trigger ? trigger->condition : NULL;
 }
 
-
 /*
  * Note: the lack of reference counting 'get' on the action object is normal.
  * This API was exposed as such in 2.11. The client is not expected to call
 /*
  * Note: the lack of reference counting 'get' on the action object is normal.
  * This API was exposed as such in 2.11. The client is not expected to call
@@ -1013,3 +1012,28 @@ end:
        lttng_payload_reset(&copy_buffer);
        return copy;
 }
        lttng_payload_reset(&copy_buffer);
        return copy;
 }
+
+LTTNG_HIDDEN
+bool lttng_trigger_needs_tracer_notifier(const struct lttng_trigger *trigger)
+{
+       bool needs_tracer_notifier = false;
+       const struct lttng_condition *condition =
+                       lttng_trigger_get_const_condition(trigger);
+
+       switch (lttng_condition_get_type(condition)) {
+       case LTTNG_CONDITION_TYPE_ON_EVENT:
+               needs_tracer_notifier = true;
+               goto end;
+       case LTTNG_CONDITION_TYPE_SESSION_CONSUMED_SIZE:
+       case LTTNG_CONDITION_TYPE_BUFFER_USAGE_HIGH:
+       case LTTNG_CONDITION_TYPE_BUFFER_USAGE_LOW:
+       case LTTNG_CONDITION_TYPE_SESSION_ROTATION_ONGOING:
+       case LTTNG_CONDITION_TYPE_SESSION_ROTATION_COMPLETED:
+               goto end;
+       case LTTNG_CONDITION_TYPE_UNKNOWN:
+       default:
+               abort();
+       }
+end:
+       return needs_tracer_notifier;
+}
This page took 0.026522 seconds and 4 git commands to generate.