X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fnotification-thread-events.c;h=2d37af07c6504a1c55eedd2c829418ef16d0a6eb;hb=b8e2fb80c105c5a8241f7b35744e4a86d7e4125c;hp=c9c21bc7225df72ee21ad8a74d33f101dd878aca;hpb=75e540c60661f7e384e35289fd13a72bc4e015e7;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/notification-thread-events.c b/src/bin/lttng-sessiond/notification-thread-events.c index c9c21bc72..2d37af07c 100644 --- a/src/bin/lttng-sessiond/notification-thread-events.c +++ b/src/bin/lttng-sessiond/notification-thread-events.c @@ -1134,9 +1134,11 @@ int notification_thread_client_subscribe(struct notification_client *client, */ CDS_INIT_LIST_HEAD(&condition_list_element->node); condition_list_element->condition = condition; + condition = NULL; cds_list_add(&condition_list_element->node, &client->condition_list); - client_list = get_client_list_from_condition(state, condition); + client_list = get_client_list_from_condition( + state, condition_list_element->condition); if (!client_list) { /* * No notification-emiting trigger registered with this @@ -1160,7 +1162,7 @@ int notification_thread_client_subscribe(struct notification_client *client, pthread_mutex_lock(&client_list->lock); cds_list_for_each_entry(trigger_ht_element, &client_list->triggers_list, client_list_trigger_node) { - if (evaluate_condition_for_client(trigger_ht_element->trigger, condition, + if (evaluate_condition_for_client(trigger_ht_element->trigger, condition_list_element->condition, client, state)) { WARN("[notification-thread] Evaluation of a condition on client subscription failed, aborting."); ret = -1; @@ -1189,10 +1191,12 @@ end: if (client_list) { notification_client_list_put(client_list); } + lttng_condition_destroy(condition); return ret; error: free(condition_list_element); free(client_list_element); + lttng_condition_destroy(condition); return ret; } @@ -2487,7 +2491,7 @@ bool is_trigger_action_notify(const struct lttng_trigger *trigger) if (action_type == LTTNG_ACTION_TYPE_NOTIFY) { is_notify = true; goto end; - } else if (action_type != LTTNG_ACTION_TYPE_GROUP) { + } else if (action_type != LTTNG_ACTION_TYPE_LIST) { goto end; } @@ -2603,7 +2607,7 @@ enum lttng_error_code setup_tracer_notifier( trigger, &error_counter_index); if (error_accounting_status != EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_OK) { if (error_accounting_status == EVENT_NOTIFIER_ERROR_ACCOUNTING_STATUS_NO_INDEX_AVAILABLE) { - DBG("Trigger group error accounting counter full."); + DBG("Trigger list error accounting counter full."); ret = LTTNG_ERR_EVENT_NOTIFIER_ERROR_ACCOUNTING_FULL; } else { ERR("Error registering trigger for error accounting"); @@ -3862,6 +3866,7 @@ int client_handle_message_subscription( goto end; } + /* Ownership of condition is always transferred. */ if (msg_type == LTTNG_NOTIFICATION_CHANNEL_MESSAGE_TYPE_SUBSCRIBE) { ret = notification_thread_client_subscribe( client, condition, state, &status); @@ -3949,6 +3954,12 @@ int handle_notification_thread_client_in( goto end; } + if (client->communication.inbound.bytes_to_receive == 0 && + client->communication.inbound.fds_to_receive != 0) { + /* Only FDs left to receive. */ + goto receive_fds; + } + offset = client->communication.inbound.payload.buffer.size - client->communication.inbound.bytes_to_receive; if (client->communication.inbound.expect_creds) { @@ -3977,6 +3988,7 @@ int handle_notification_thread_client_in( goto end; } +receive_fds: assert(client->communication.inbound.bytes_to_receive == 0); /* Receive fds. */ @@ -4463,7 +4475,7 @@ struct lttng_event_notifier_notification *recv_one_event_notifier_notification( size_t reception_size; struct lttng_ust_abi_event_notifier_notification ust_notification; - struct lttng_kernel_event_notifier_notification kernel_notification; + struct lttng_kernel_abi_event_notifier_notification kernel_notification; /* Init lttng_event_notifier_notification */ switch(domain) {