X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fsnapshot.c;h=6e4a0c3f172a1ca577ae5972cbfbd7343b5bfeea;hp=f9366b36e5cab2ea27f8474af7286a4437a7d050;hb=3a5f70173aa04d11ccb22694d5d31a702cad33ab;hpb=d07ceecd2f35ccf383c7529a18dcc9b9c4b8cb17 diff --git a/src/bin/lttng-sessiond/snapshot.c b/src/bin/lttng-sessiond/snapshot.c index f9366b36e..6e4a0c3f1 100644 --- a/src/bin/lttng-sessiond/snapshot.c +++ b/src/bin/lttng-sessiond/snapshot.c @@ -1,23 +1,11 @@ /* - * Copyright (C) 2013 - David Goulet + * Copyright (C) 2013 David Goulet * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License, version 2 only, as - * published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#define _GNU_SOURCE #define _LGPL_SOURCE -#include #include #include #include @@ -40,7 +28,8 @@ static inline unsigned long get_next_output_id(struct snapshot *snapshot) * * Return 0 on success or else a negative value. */ -static int output_init(uint64_t max_size, const char *name, +static int output_init(const struct ltt_session *session, + uint64_t max_size, const char *name, struct lttng_uri *uris, size_t nb_uri, struct consumer_output *consumer, struct snapshot_output *output, struct snapshot *snapshot) @@ -63,7 +52,10 @@ static int output_init(uint64_t max_size, const char *name, lttng_ht_node_init_ulong(&output->node, (unsigned long) output->id); if (name && name[0] != '\0') { - strncpy(output->name, name, sizeof(output->name)); + if (lttng_strncpy(output->name, name, sizeof(output->name))) { + ret = -LTTNG_ERR_INVALID; + goto error; + } } else { /* Set default name. */ ret = snprintf(output->name, sizeof(output->name), "%s-%" PRIu32, @@ -92,10 +84,14 @@ static int output_init(uint64_t max_size, const char *name, } if (uris[0].dtype == LTTNG_DST_PATH) { - memset(output->consumer->dst.trace_path, 0, - sizeof(output->consumer->dst.trace_path)); - strncpy(output->consumer->dst.trace_path, uris[0].dst.path, - sizeof(output->consumer->dst.trace_path)); + memset(output->consumer->dst.session_root_path, 0, + sizeof(output->consumer->dst.session_root_path)); + if (lttng_strncpy(output->consumer->dst.session_root_path, + uris[0].dst.path, + sizeof(output->consumer->dst.session_root_path))) { + ret = -LTTNG_ERR_INVALID; + goto error; + } output->consumer->type = CONSUMER_DST_LOCAL; ret = 0; goto end; @@ -109,7 +105,8 @@ static int output_init(uint64_t max_size, const char *name, for (i = 0; i < nb_uri; i ++) { /* Network URIs */ - ret = consumer_set_network_uri(output->consumer, &uris[i]); + ret = consumer_set_network_uri(session, output->consumer, + &uris[i]); if (ret < 0) { goto error; } @@ -126,13 +123,14 @@ end: * * Return 0 on success or else a negative value. */ -int snapshot_output_init_with_uri(uint64_t max_size, const char *name, +int snapshot_output_init_with_uri(const struct ltt_session *session, + uint64_t max_size, const char *name, struct lttng_uri *uris, size_t nb_uri, struct consumer_output *consumer, struct snapshot_output *output, struct snapshot *snapshot) { - return output_init(max_size, name, uris, nb_uri, consumer, output, - snapshot); + return output_init(session, max_size, name, uris, nb_uri, consumer, + output, snapshot); } /* @@ -141,7 +139,8 @@ int snapshot_output_init_with_uri(uint64_t max_size, const char *name, * * Return 0 on success or else a negative value. */ -int snapshot_output_init(uint64_t max_size, const char *name, +int snapshot_output_init(const struct ltt_session *session, + uint64_t max_size, const char *name, const char *ctrl_url, const char *data_url, struct consumer_output *consumer, struct snapshot_output *output, struct snapshot *snapshot) @@ -156,8 +155,8 @@ int snapshot_output_init(uint64_t max_size, const char *name, goto error; } - ret = output_init(max_size, name, uris, nb_uri, consumer, output, - snapshot); + ret = output_init(session, max_size, name, uris, nb_uri, consumer, + output, snapshot); error: free(uris); @@ -178,15 +177,15 @@ void snapshot_delete_output(struct snapshot *snapshot, int ret; struct lttng_ht_iter iter; - assert(snapshot); - assert(snapshot->output_ht); - assert(output); + LTTNG_ASSERT(snapshot); + LTTNG_ASSERT(snapshot->output_ht); + LTTNG_ASSERT(output); iter.iter.node = &output->node.node; rcu_read_lock(); ret = lttng_ht_del(snapshot->output_ht, &iter); rcu_read_unlock(); - assert(!ret); + LTTNG_ASSERT(!ret); /* * This is safe because the ownership of a snapshot object is in a session * for which the session lock need to be acquired to read and modify it. @@ -200,9 +199,9 @@ void snapshot_delete_output(struct snapshot *snapshot, void snapshot_add_output(struct snapshot *snapshot, struct snapshot_output *output) { - assert(snapshot); - assert(snapshot->output_ht); - assert(output); + LTTNG_ASSERT(snapshot); + LTTNG_ASSERT(snapshot->output_ht); + LTTNG_ASSERT(output); rcu_read_lock(); lttng_ht_add_unique_ulong(snapshot->output_ht, &output->node); @@ -219,11 +218,11 @@ void snapshot_add_output(struct snapshot *snapshot, */ void snapshot_output_destroy(struct snapshot_output *obj) { - assert(obj); + LTTNG_ASSERT(obj); if (obj->consumer) { consumer_output_send_destroy_relayd(obj->consumer); - consumer_destroy_output(obj->consumer); + consumer_output_put(obj->consumer); } free(obj); } @@ -240,8 +239,8 @@ struct snapshot_output *snapshot_find_output_by_name(const char *name, struct lttng_ht_iter iter; struct snapshot_output *output = NULL; - assert(snapshot); - assert(name); + LTTNG_ASSERT(snapshot); + LTTNG_ASSERT(name); cds_lfht_for_each_entry(snapshot->output_ht->ht, &iter.iter, output, node.node) { @@ -267,7 +266,7 @@ struct snapshot_output *snapshot_find_output_by_id(uint32_t id, struct lttng_ht_iter iter; struct snapshot_output *output = NULL; - assert(snapshot); + LTTNG_ASSERT(snapshot); lttng_ht_lookup(snapshot->output_ht, (void *)((unsigned long) id), &iter); node = lttng_ht_iter_get_node_ulong(&iter); @@ -290,7 +289,7 @@ int snapshot_init(struct snapshot *obj) { int ret; - assert(obj); + LTTNG_ASSERT(obj); memset(obj, 0, sizeof(struct snapshot)); @@ -315,7 +314,9 @@ void snapshot_destroy(struct snapshot *obj) struct lttng_ht_iter iter; struct snapshot_output *output; - assert(obj); + if (!obj->output_ht) { + return; + } rcu_read_lock(); cds_lfht_for_each_entry(obj->output_ht->ht, &iter.iter, output,