X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-internal.h;h=e835bd6afe3cad4ab2532059db867aeb16e59e6a;hb=c0e2990d32d1e55c783c7eb3299f23a7ce062270;hp=e36180fb6af634ef4e23c6f1ad7aba45bb3017d1;hpb=6c24d3fd5ade8231445e720c174afe3da4210179;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/notification-thread-internal.h b/src/bin/lttng-sessiond/notification-thread-internal.h index e36180fb6..e835bd6af 100644 --- a/src/bin/lttng-sessiond/notification-thread-internal.h +++ b/src/bin/lttng-sessiond/notification-thread-internal.h @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -74,6 +75,17 @@ struct channel_info { struct rcu_head rcu_node; }; +/* + * Facilities to carry the different notifications type in the action + * processing code path. + */ +struct lttng_event_notifier_notification { + uint64_t tracer_token; + enum lttng_domain_type type; + size_t capture_buf_size; + char *capture_buffer; +}; + struct notification_client_list_element { struct notification_client *client; struct cds_list_head node; @@ -101,8 +113,10 @@ struct notification_client_list_element { struct notification_client_list { pthread_mutex_t lock; struct urcu_ref ref; - const struct lttng_trigger *trigger; - struct cds_list_head list; + struct lttng_condition *condition; + /* List of triggers that have an identical condition than `condition`. */ + struct cds_list_head triggers_list; + struct cds_list_head clients_list; /* Weak reference to container. */ struct cds_lfht *notification_trigger_clients_ht; struct cds_lfht_node notification_trigger_clients_ht_node; @@ -156,9 +170,11 @@ struct notification_client { * buffers' "size" is set to contain the current * message's complete payload. */ - struct lttng_dynamic_buffer buffer; + struct lttng_payload payload; /* Bytes left to receive for the current message. */ size_t bytes_to_receive; + /* FDs left to receive for the current message. */ + int fds_to_receive; /* Type of the message being received. */ enum lttng_notification_channel_message_type msg_type; /* @@ -192,7 +208,7 @@ struct notification_client { * misbehaving/malicious client. */ bool queued_command_reply; - struct lttng_dynamic_buffer buffer; + struct lttng_payload payload; } outbound; } communication; /* call_rcu delayed reclaim. */ @@ -223,9 +239,8 @@ typedef int (*report_client_transmission_result_cb)( LTTNG_HIDDEN int notification_client_list_send_evaluation( struct notification_client_list *list, - const struct lttng_condition *condition, + const struct lttng_trigger *trigger, const struct lttng_evaluation *evaluation, - const struct lttng_credentials *trigger_creds, const struct lttng_credentials *source_object_creds, report_client_transmission_result_cb client_report, void *user_data); @@ -236,4 +251,18 @@ int notification_thread_client_communication_update( notification_client_id id, enum client_transmission_status transmission_status); +/* + * Takes ownership of the payload if present. + */ +LTTNG_HIDDEN +struct lttng_event_notifier_notification *lttng_event_notifier_notification_create( + uint64_t tracer_token, + enum lttng_domain_type domain, + char *payload, + size_t payload_size); + +LTTNG_HIDDEN +void lttng_event_notifier_notification_destroy( + struct lttng_event_notifier_notification *event_notifier_notification); + #endif /* NOTIFICATION_THREAD_INTERNAL_H */