From 9d0b798a513f4e3b177c15ea381040f4fe6011b9 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Thu, 2 Nov 2023 18:57:32 +0000 Subject: [PATCH] src.ctf.lttng-live: add bt_common_lttng_live_url_parts_deleter bt_common_lttng_live_url_parts can't be made a C++ object that automatically manages its memory yet, since it's used in babeltrace2-cfg-cli-args.c (C code). Add an RAII type in lttng-live to automatically call bt_common_destroy_lttng_live_url_parts in two places. Change-Id: I233a5ba5a2829f4577c4ebbcc1ab0e630d039174 Signed-off-by: Simon Marchi Reviewed-on: https://review.lttng.org/c/babeltrace/+/8475 Reviewed-by: Philippe Proulx Reviewed-on: https://review.lttng.org/c/babeltrace/+/12390 Tested-by: jenkins --- src/plugins/ctf/lttng-live/lttng-live.cpp | 2 +- src/plugins/ctf/lttng-live/lttng-live.hpp | 25 +++++++++++++++++++ .../ctf/lttng-live/viewer-connection.cpp | 2 +- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index 1b5c90ee..26beceda 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -1751,6 +1751,7 @@ lttng_live_query_support_info(const bt_value *params, const bt_value **result, const bt_value *input_value; double weight = 0; struct bt_common_lttng_live_url_parts parts = {}; + bt_common_lttng_live_url_parts_deleter partsDeleter {parts}; /* Used by the logging macros */ __attribute__((unused)) bt_self_component *self_comp = NULL; @@ -1809,7 +1810,6 @@ error: BT_ASSERT(!*result); end: - bt_common_destroy_lttng_live_url_parts(&parts); return status; } diff --git a/src/plugins/ctf/lttng-live/lttng-live.hpp b/src/plugins/ctf/lttng-live/lttng-live.hpp index cbdf27d8..9dbc432a 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.hpp +++ b/src/plugins/ctf/lttng-live/lttng-live.hpp @@ -23,6 +23,31 @@ #include "../common/src/msg-iter/msg-iter.hpp" #include "viewer-connection.hpp" +/* + * bt_common_lttng_live_url_parts is defined in common code, and is also used + * by C code, so it can't be C++-ified yet. Use this separate deleter object + * in the mean time. + */ +struct bt_common_lttng_live_url_parts_deleter +{ + explicit bt_common_lttng_live_url_parts_deleter(bt_common_lttng_live_url_parts& obj) noexcept : + _mObj {&obj} + { + } + + bt_common_lttng_live_url_parts_deleter(const bt_common_lttng_live_url_parts_deleter&) = delete; + bt_common_lttng_live_url_parts& + operator=(const bt_common_lttng_live_url_parts_deleter&) = delete; + + ~bt_common_lttng_live_url_parts_deleter() + { + bt_common_destroy_lttng_live_url_parts(_mObj); + } + +private: + bt_common_lttng_live_url_parts *_mObj; +}; + enum lttng_live_stream_state { /* This stream won't have data until some known time in the future. */ diff --git a/src/plugins/ctf/lttng-live/viewer-connection.cpp b/src/plugins/ctf/lttng-live/viewer-connection.cpp index 66605b10..924e5fba 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.cpp +++ b/src/plugins/ctf/lttng-live/viewer-connection.cpp @@ -229,6 +229,7 @@ static int parse_url(struct live_viewer_connection *viewer_connection) { char error_buf[256] = {0}; struct bt_common_lttng_live_url_parts lttng_live_url_parts = {}; + bt_common_lttng_live_url_parts_deleter partsDeleter {lttng_live_url_parts}; int ret = -1; if (viewer_connection->url.empty()) { @@ -265,7 +266,6 @@ static int parse_url(struct live_viewer_connection *viewer_connection) ret = 0; end: - bt_common_destroy_lttng_live_url_parts(<tng_live_url_parts); return ret; } -- 2.34.1