#include <common/hashtable/hashtable.hpp>
#include <common/hashtable/utils.hpp>
#include <common/tracker.hpp>
+#include <common/urcu.hpp>
#include <lttng/lttng-error.h>
free(node);
}
-struct process_attr_tracker *process_attr_tracker_create(void)
+struct process_attr_tracker *process_attr_tracker_create()
{
struct process_attr_tracker *tracker;
tracker = zmalloc<process_attr_tracker>();
if (!tracker) {
- return NULL;
+ return nullptr;
}
(void) process_attr_tracker_set_tracking_policy(tracker, LTTNG_TRACKING_POLICY_INCLUDE_ALL);
tracker->inclusion_set_ht = cds_lfht_new(
- DEFAULT_HT_SIZE, 1, 0, CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING, NULL);
+ DEFAULT_HT_SIZE, 1, 0, CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING, nullptr);
if (!tracker->inclusion_set_ht) {
goto error;
}
return tracker;
error:
process_attr_tracker_destroy(tracker);
- return NULL;
+ return nullptr;
}
static void
return;
}
- rcu_read_lock();
- cds_lfht_for_each_entry (
- tracker->inclusion_set_ht, &iter.iter, value_node, inclusion_set_ht_node) {
- process_attr_tracker_remove_value_node(tracker, value_node);
+ {
+ lttng::urcu::read_lock_guard read_lock;
+
+ cds_lfht_for_each_entry (
+ tracker->inclusion_set_ht, &iter.iter, value_node, inclusion_set_ht_node) {
+ process_attr_tracker_remove_value_node(tracker, value_node);
+ }
}
- rcu_read_unlock();
- ret = cds_lfht_destroy(tracker->inclusion_set_ht, NULL);
+
+ ret = cds_lfht_destroy(tracker->inclusion_set_ht, nullptr);
LTTNG_ASSERT(ret == 0);
- tracker->inclusion_set_ht = NULL;
+ tracker->inclusion_set_ht = nullptr;
}
static int process_attr_tracker_create_inclusion_set(struct process_attr_tracker *tracker)
{
LTTNG_ASSERT(!tracker->inclusion_set_ht);
tracker->inclusion_set_ht = cds_lfht_new(
- DEFAULT_HT_SIZE, 1, 0, CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING, NULL);
+ DEFAULT_HT_SIZE, 1, 0, CDS_LFHT_AUTO_RESIZE | CDS_LFHT_ACCOUNTING, nullptr);
return tracker->inclusion_set_ht ? 0 : -1;
}
LTTNG_ASSERT(tracker->policy == LTTNG_TRACKING_POLICY_INCLUDE_SET);
- rcu_read_lock();
+ lttng::urcu::read_lock_guard read_lock;
cds_lfht_lookup(tracker->inclusion_set_ht,
process_attr_value_hash(value),
match_inclusion_set_value,
value,
&iter);
node = cds_lfht_iter_get_node(&iter);
- rcu_read_unlock();
return node ? lttng::utils::container_of(
node, &process_attr_tracker_value_node::inclusion_set_ht_node) :
- NULL;
+ nullptr;
}
/* Protected by session mutex held by caller. */
const struct process_attr_value *value)
{
enum process_attr_tracker_status status = PROCESS_ATTR_TRACKER_STATUS_OK;
- struct process_attr_value *value_copy = NULL;
- struct process_attr_tracker_value_node *value_node = NULL;
+ struct process_attr_value *value_copy = nullptr;
+ struct process_attr_tracker_value_node *value_node = nullptr;
- rcu_read_lock();
+ lttng::urcu::read_lock_guard read_lock;
if (tracker->policy != LTTNG_TRACKING_POLICY_INCLUDE_SET) {
status = PROCESS_ATTR_TRACKER_STATUS_INVALID_TRACKING_POLICY;
goto end;
cds_lfht_add(tracker->inclusion_set_ht,
process_attr_value_hash(value_copy),
&value_node->inclusion_set_ht_node);
- value_copy = NULL;
- value_node = NULL;
+ value_copy = nullptr;
+ value_node = nullptr;
end:
if (value_copy) {
process_attr_value_destroy(value_copy);
if (value_node) {
free(value_node);
}
- rcu_read_unlock();
return status;
}
struct process_attr_tracker_value_node *value_node;
enum process_attr_tracker_status status = PROCESS_ATTR_TRACKER_STATUS_OK;
- rcu_read_lock();
+ lttng::urcu::read_lock_guard read_lock;
if (tracker->policy != LTTNG_TRACKING_POLICY_INCLUDE_SET) {
status = PROCESS_ATTR_TRACKER_STATUS_INVALID_TRACKING_POLICY;
goto end;
process_attr_tracker_remove_value_node(tracker, value_node);
end:
- rcu_read_unlock();
return status;
}
struct process_attr_tracker_value_node *value_node;
enum process_attr_tracker_status status = PROCESS_ATTR_TRACKER_STATUS_OK;
struct lttng_process_attr_values *values;
- struct process_attr_value *new_value = NULL;
+ struct process_attr_value *new_value = nullptr;
values = lttng_process_attr_values_create();
if (!values) {
goto error;
}
- rcu_read_lock();
- cds_lfht_for_each_entry (
- tracker->inclusion_set_ht, &iter.iter, value_node, inclusion_set_ht_node) {
- int ret;
+ {
+ lttng::urcu::read_lock_guard read_lock;
- new_value = process_attr_value_copy(value_node->value);
- if (!new_value) {
- status = PROCESS_ATTR_TRACKER_STATUS_ERROR;
- goto error_unlock;
- }
+ cds_lfht_for_each_entry (
+ tracker->inclusion_set_ht, &iter.iter, value_node, inclusion_set_ht_node) {
+ int ret;
- ret = lttng_dynamic_pointer_array_add_pointer(&values->array, new_value);
- if (ret) {
- status = PROCESS_ATTR_TRACKER_STATUS_ERROR;
- goto error_unlock;
- }
+ new_value = process_attr_value_copy(value_node->value);
+ if (!new_value) {
+ status = PROCESS_ATTR_TRACKER_STATUS_ERROR;
+ goto error_unlock;
+ }
+
+ ret = lttng_dynamic_pointer_array_add_pointer(&values->array, new_value);
+ if (ret) {
+ status = PROCESS_ATTR_TRACKER_STATUS_ERROR;
+ goto error_unlock;
+ }
- new_value = NULL;
+ new_value = nullptr;
+ }
}
- rcu_read_unlock();
+
*_values = values;
return status;
error_unlock:
- rcu_read_unlock();
error:
lttng_process_attr_values_destroy(values);
process_attr_value_destroy(new_value);