X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommon%2Fsession-rotation.c;h=3536f9602f6126a9bde6df18e8b9e24af6ba8bb2;hb=420e125556b416f84193298c239410018a228697;hp=be48a998a98030d41e4cdc49793f3f3579481f4c;hpb=c19092cd4d6af49c38322fc55ca91f17f03f32ac;p=lttng-tools.git diff --git a/src/common/session-rotation.c b/src/common/session-rotation.c index be48a998a..3536f9602 100644 --- a/src/common/session-rotation.c +++ b/src/common/session-rotation.c @@ -1,18 +1,8 @@ /* - * Copyright (C) 2017 - Jérémie Galarneau + * Copyright (C) 2017 Jérémie Galarneau * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License, version 2.1 only, - * as published by the Free Software Foundation. + * SPDX-License-Identifier: LGPL-2.1-only * - * This library 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 Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -194,7 +184,7 @@ struct lttng_condition *lttng_condition_session_rotation_create( } memcpy(&condition->parent, &rotation_condition_template, - sizeof(*condition)); + sizeof(condition->parent)); lttng_condition_init(&condition->parent, type); return &condition->parent; } @@ -341,9 +331,12 @@ struct lttng_evaluation *lttng_evaluation_session_rotation_create( } memcpy(&evaluation->parent, &rotation_evaluation_template, - sizeof(*evaluation)); + sizeof(evaluation->parent)); lttng_evaluation_init(&evaluation->parent, type); evaluation->id = id; + if (location) { + lttng_trace_archive_location_get(location); + } evaluation->location = location; return &evaluation->parent; } @@ -387,11 +380,12 @@ ssize_t create_evaluation_from_buffer( goto error; } + lttng_trace_archive_location_put(location); ret = size; *_evaluation = evaluation; return ret; error: - lttng_trace_archive_location_destroy(location); + lttng_trace_archive_location_put(location); evaluation = NULL; return -1; } @@ -546,7 +540,7 @@ void lttng_evaluation_session_rotation_destroy( rotation = container_of(evaluation, struct lttng_evaluation_session_rotation, parent); - lttng_trace_archive_location_destroy(rotation->location); + lttng_trace_archive_location_put(rotation->location); free(rotation); } @@ -569,6 +563,12 @@ end: return status; } +/* + * The public API assumes that trace archive locations are always provided as + * "constant". This means that the user of liblttng-ctl never has to destroy a + * trace archive location. Hence, users of liblttng-ctl have no visibility of + * the reference counting of archive locations. + */ enum lttng_evaluation_status lttng_evaluation_session_rotation_completed_get_location( const struct lttng_evaluation *evaluation,