+ if (ret_code != LTTNG_OK) {
+ ERR("Failed to register trigger to notification thread: trigger name = '%s', trigger owner uid = %d, error code = %d",
+ trigger_name, (int) trigger_owner, ret_code);
+ goto end_notification_thread;
+ }
+
+ ret_code = trigger_modifies_event_notifier(trigger, &must_update_event_notifier);
+ if (ret_code != LTTNG_OK) {
+ ERR("Failed to determine if event modifies event notifiers: trigger name = '%s', trigger owner uid = %d, error code = %d",
+ trigger_name, (int) trigger_owner, ret_code);
+ goto end_notification_thread;
+ }
+
+ /*
+ * Synchronize tracers if the trigger adds an event notifier.
+ */
+ if (must_update_event_notifier) {
+ if (lttng_trigger_get_underlying_domain_type_restriction(
+ trigger) == LTTNG_DOMAIN_KERNEL) {
+
+ ret_code = kernel_register_event_notifier(
+ trigger, cmd_creds);
+ if (ret_code != LTTNG_OK) {
+ const enum lttng_error_code notif_thread_unregister_ret =
+ notification_thread_command_unregister_trigger(
+ notification_thread,
+ trigger);
+
+ if (notif_thread_unregister_ret != LTTNG_OK) {
+ /* Return the original error code. */
+ ERR("Failed to unregister trigger from notification thread during error recovery: trigger name = '%s', trigger owner uid = %d, error code = %d",
+ trigger_name,
+ (int) trigger_owner,
+ ret_code);
+ }
+
+ goto end;
+ }
+ } else {
+ ust_app_global_update_all_event_notifier_rules();
+ }
+ }
+
+ /*
+ * Return an updated trigger to the client.
+ *
+ * Since a modified version of the same trigger is returned, acquire a
+ * reference to the trigger so the caller doesn't have to care if those
+ * are distinct instances or not.
+ */
+ lttng_trigger_get(trigger);
+ *return_trigger = trigger;
+
+end_notification_thread: