X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsnapshot.c;h=1060269f3a9e0b15232f07ec380e643fb027a18c;hp=28364bbc75575508dc823c0ca6f819981bf66d0f;hb=6c1c0768320135c6936c371b09731851b508c023;hpb=5288612f2dc35805e861d0648bf75304c91bfeee diff --git a/src/bin/lttng-sessiond/snapshot.c b/src/bin/lttng-sessiond/snapshot.c index 28364bbc7..1060269f3 100644 --- a/src/bin/lttng-sessiond/snapshot.c +++ b/src/bin/lttng-sessiond/snapshot.c @@ -16,6 +16,7 @@ */ #define _GNU_SOURCE +#define _LGPL_SOURCE #include #include #include @@ -24,6 +25,7 @@ #include #include "snapshot.h" +#include "utils.h" /* * Return the atomically incremented value of next_output_id. @@ -47,7 +49,13 @@ static int output_init(uint64_t max_size, const char *name, assert(output); + memset(output, 0, sizeof(struct snapshot_output)); + + if (max_size == (uint64_t) -1ULL) { + max_size = 0; + } output->max_size = max_size; + if (snapshot) { output->id = get_next_output_id(snapshot); } @@ -74,6 +82,7 @@ static int output_init(uint64_t max_size, const char *name, ret = -ENOMEM; goto error; } + output->consumer->snapshot = 1; /* No URL given. */ if (nb_uri == 0) { @@ -218,6 +227,32 @@ void snapshot_output_destroy(struct snapshot_output *obj) free(obj); } +/* + * RCU read side lock MUST be acquired before calling this since the returned + * pointer is in a RCU hash table. + * + * Return the reference on success or else NULL. + */ +struct snapshot_output *snapshot_find_output_by_name(const char *name, + struct snapshot *snapshot) +{ + struct lttng_ht_iter iter; + struct snapshot_output *output = NULL; + + assert(snapshot); + assert(name); + + cds_lfht_for_each_entry(snapshot->output_ht->ht, &iter.iter, output, + node.node) { + if (!strncmp(output->name, name, strlen(name))) { + return output; + } + } + + /* Not found */ + return NULL; +} + /* * RCU read side lock MUST be acquired before calling this since the returned * pointer is in a RCU hash table. @@ -288,4 +323,5 @@ void snapshot_destroy(struct snapshot *obj) snapshot_output_destroy(output); } rcu_read_unlock(); + ht_cleanup_push(obj->output_ht); }