Fix: do not repurpose iterator while it is being used
[lttng-tools.git] / src / bin / lttng-sessiond / notification-thread-events.c
index 5e53b79a1661a458e5d4bada395350b152f6d725..f54141e73b2a14341b1bd1610db5e8400daeb530 100644 (file)
@@ -88,7 +88,7 @@ struct notification_client {
        uid_t uid;
        gid_t gid;
        /*
-        * Indicates if the credentials and versions of the client has been
+        * Indicates if the credentials and versions of the client have been
         * checked.
         */
        bool validated;
@@ -295,7 +295,7 @@ unsigned long lttng_condition_buffer_usage_hash(
 
                val = condition->threshold_ratio.value * (double) UINT32_MAX;
                hash ^= hash_key_u64(&val, lttng_ht_seed);
-       } else if (condition->threshold_ratio.set) {
+       } else if (condition->threshold_bytes.set) {
                uint64_t val;
 
                val = condition->threshold_bytes.value;
@@ -469,7 +469,7 @@ int evaluate_condition_for_client(struct lttng_trigger *trigger,
        ret = evaluate_condition(condition, &evaluation, state, NULL,
                        last_sample, channel_info->capacity);
        if (ret) {
-               WARN("[notification-thread] Fatal error occured while evaluating a newly subscribed-to condition");
+               WARN("[notification-thread] Fatal error occurred while evaluating a newly subscribed-to condition");
                goto end;
        }
 
@@ -565,6 +565,7 @@ int notification_thread_client_subscribe(struct notification_client *client,
                        client, state)) {
                WARN("[notification-thread] Evaluation of a condition on client subscription failed, aborting.");
                ret = -1;
+               free(client_list_element);
                goto end_unlock;
        }
 
@@ -1118,6 +1119,7 @@ int handle_notification_thread_command_register_trigger(
                        channels_ht_node) {
                struct lttng_trigger_list_element *trigger_list_element;
                struct lttng_channel_trigger_list *trigger_list;
+               struct cds_lfht_iter lookup_iter;
 
                if (!trigger_applies_to_channel(trigger, channel)) {
                        continue;
@@ -1127,8 +1129,8 @@ int handle_notification_thread_command_register_trigger(
                                hash_channel_key(&channel->key),
                                match_channel_trigger_list,
                                &channel->key,
-                               &iter);
-               node = cds_lfht_iter_get_node(&iter);
+                               &lookup_iter);
+               node = cds_lfht_iter_get_node(&lookup_iter);
                assert(node);
                trigger_list = caa_container_of(node,
                                struct lttng_channel_trigger_list,
@@ -1275,7 +1277,7 @@ int handle_notification_thread_command(
        struct notification_thread_command *cmd;
 
        /* Read event_fd to put it back into a quiescent state. */
-       ret = read(handle->cmd_queue.event_fd, &counter, sizeof(counter));
+       ret = read(lttng_pipe_get_readfd(handle->cmd_queue.event_pipe), &counter, sizeof(counter));
        if (ret == -1) {
                goto error;
        }
This page took 0.02448 seconds and 4 git commands to generate.