WARN("[notification-thread] Evaluation of a condition on client subscription failed, aborting.");
ret = -1;
free(client_list_element);
+ pthread_mutex_unlock(&client_list->lock);
goto end;
}
}
goto error_free_ht_element;
}
+ /* From this point consider the trigger registered. */
+ lttng_trigger_set_as_registered(trigger);
+
/*
* Some triggers might need a tracer notifier depending on its
* condition and actions.
}
error:
if (free_trigger) {
+ /*
+ * Other objects might have a reference to the trigger, mark it
+ * as unregistered.
+ */
+ lttng_trigger_set_as_unregistered(trigger);
lttng_trigger_destroy(trigger);
}
end:
cmd_reply = LTTNG_OK;
}
+ trigger_ht_element = caa_container_of(triggers_ht_node,
+ struct lttng_trigger_ht_element, node);
+
+ /* From this point, consider the trigger unregistered no matter what. */
+ lttng_trigger_set_as_unregistered(trigger_ht_element->trigger);
+
/* Remove trigger from channel_triggers_ht. */
cds_lfht_for_each_entry(state->channel_triggers_ht, &iter, trigger_list,
channel_triggers_ht_node) {
teardown_tracer_notifier(state, trigger);
}
- trigger_ht_element = caa_container_of(triggers_ht_node,
- struct lttng_trigger_ht_element, node);
-
if (is_trigger_action_notify(trigger)) {
/*
* Remove and release the client list from
}
}
- if (client->uid != lttng_credentials_get_uid(trigger_creds) && client->gid != lttng_credentials_get_gid(trigger_creds)) {
+ if (client->uid != lttng_credentials_get_uid(trigger_creds)) {
DBG("[notification-thread] Skipping client at it does not have the permission to receive notification for this trigger");
goto skip_client;
}
struct notification_trigger_tokens_ht_element,
node);
- if (!lttng_trigger_should_fire(element->trigger)) {
- ret = 0;
- goto end_unlock;
- }
-
- lttng_trigger_fire(element->trigger);
-
trigger_status = lttng_trigger_get_name(element->trigger, &trigger_name);
assert(trigger_status == LTTNG_TRIGGER_STATUS_OK);
goto put_list;
}
- if (!lttng_trigger_should_fire(trigger)) {
- goto put_list;
- }
-
- lttng_trigger_fire(trigger);
-
/*
* Ownership of `evaluation` transferred to the action executor
* no matter the result.