Change-Id: I745900032bc5d880a305e434afaeaeaef728708d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/8461
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12377
Tested-by: jenkins <jenkins@lttng.org>
bt_self_message_iterator *self_msg_iter)
{
struct lttng_live_component *lttng_live = session->lttng_live_msg_iter->lttng_live_comp;
bt_self_message_iterator *self_msg_iter)
{
struct lttng_live_component *lttng_live = session->lttng_live_msg_iter->lttng_live_comp;
- uint64_t trace_idx, stream_iter_idx;
if (!session->lazy_stream_msg_init) {
return LTTNG_LIVE_ITERATOR_STATUS_OK;
if (!session->lazy_stream_msg_init) {
return LTTNG_LIVE_ITERATOR_STATUS_OK;
struct lttng_live_trace *trace =
(lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx);
struct lttng_live_trace *trace =
(lttng_live_trace *) g_ptr_array_index(session->traces, trace_idx);
- for (stream_iter_idx = 0; stream_iter_idx < trace->stream_iterators->len;
- stream_iter_idx++) {
+ for (lttng_live_stream_iterator::UP& stream_iter : trace->stream_iterators) {
struct ctf_trace_class *ctf_tc;
struct ctf_trace_class *ctf_tc;
- struct lttng_live_stream_iterator *stream_iter =
- (lttng_live_stream_iterator *) g_ptr_array_index(trace->stream_iterators,
- stream_iter_idx);
if (stream_iter->msg_iter) {
continue;
}
if (stream_iter->msg_iter) {
continue;
}
ctf_tc = ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get());
BT_CPPLOGD_SPEC(stream_iter->logger,
"Creating CTF message iterator: session-id={}, ctf-tc-addr={}, "
ctf_tc = ctf_metadata_decoder_borrow_ctf_trace_class(trace->metadata->decoder.get());
BT_CPPLOGD_SPEC(stream_iter->logger,
"Creating CTF message iterator: session-id={}, ctf-tc-addr={}, "
session->id, fmt::ptr(ctf_tc), stream_iter->name,
fmt::ptr(self_msg_iter));
stream_iter->msg_iter =
session->id, fmt::ptr(ctf_tc), stream_iter->name,
fmt::ptr(self_msg_iter));
stream_iter->msg_iter =
- ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter,
+ ctf_msg_iter_create(ctf_tc, lttng_live->max_query_size, medops, stream_iter.get(),
self_msg_iter, stream_iter->logger);
if (!stream_iter->msg_iter) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
self_msg_iter, stream_iter->logger);
if (!stream_iter->msg_iter) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
stream_iter->name = nameSs.str();
const auto ret = stream_iter.get();
stream_iter->name = nameSs.str();
const auto ret = stream_iter.get();
- g_ptr_array_add(trace->stream_iterators, stream_iter.release());
+ trace->stream_iterators.emplace_back(std::move(stream_iter));
/* Track the number of active stream iterator. */
session->lttng_live_msg_iter->active_stream_iter++;
/* Track the number of active stream iterator. */
session->lttng_live_msg_iter->active_stream_iter++;
/* Track the number of active stream iterator. */
this->trace->session->lttng_live_msg_iter->active_stream_iter--;
}
/* Track the number of active stream iterator. */
this->trace->session->lttng_live_msg_iter->active_stream_iter--;
}
-
-void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *stream_iter)
-{
- delete stream_iter;
-}
lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t ctf_trace_id,
uint64_t stream_id, bt_self_message_iterator *self_msg_iter);
lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t ctf_trace_id,
uint64_t stream_id, bt_self_message_iterator *self_msg_iter);
-void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *stream);
-
#endif /* LTTNG_LIVE_DATA_STREAM_H */
#endif /* LTTNG_LIVE_DATA_STREAM_H */
#include "common/assert.h"
#include "cpp-common/bt2c/fmt.hpp"
#include "cpp-common/bt2c/glib-up.hpp"
#include "common/assert.h"
#include "cpp-common/bt2c/fmt.hpp"
#include "cpp-common/bt2c/glib-up.hpp"
+#include "cpp-common/bt2c/vector.hpp"
#include "cpp-common/bt2s/make-unique.hpp"
#include "cpp-common/vendor/fmt/format.h"
#include "cpp-common/bt2s/make-unique.hpp"
#include "cpp-common/vendor/fmt/format.h"
{
BT_CPPLOGD_SPEC(trace->logger, "Destroying live trace: trace-id={}", trace->id);
{
BT_CPPLOGD_SPEC(trace->logger, "Destroying live trace: trace-id={}", trace->id);
- BT_ASSERT(trace->stream_iterators);
- g_ptr_array_free(trace->stream_iterators, TRUE);
-
lttng_live_trace *trace = new lttng_live_trace {session->logger};
trace->session = session;
trace->id = trace_id;
lttng_live_trace *trace = new lttng_live_trace {session->logger};
trace->session = session;
trace->id = trace_id;
- trace->stream_iterators =
- g_ptr_array_new_with_free_func((GDestroyNotify) lttng_live_stream_iterator_destroy);
- BT_ASSERT(trace->stream_iterators);
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;
g_ptr_array_add(session->traces, trace);
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;
g_ptr_array_add(session->traces, trace);
uint64_t stream_iter_idx;
BT_ASSERT_DBG(live_trace);
uint64_t stream_iter_idx;
BT_ASSERT_DBG(live_trace);
- BT_ASSERT_DBG(live_trace->stream_iterators);
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
"Finding the next stream iterator for trace: "
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
"Finding the next stream iterator for trace: "
* ensure monotonicity.
*/
stream_iter_idx = 0;
* ensure monotonicity.
*/
stream_iter_idx = 0;
- while (stream_iter_idx < live_trace->stream_iterators->len) {
+ while (stream_iter_idx < live_trace->stream_iterators.size()) {
bool stream_iter_is_ended = false;
bool stream_iter_is_ended = false;
- struct lttng_live_stream_iterator *stream_iter =
- (lttng_live_stream_iterator *) g_ptr_array_index(live_trace->stream_iterators,
- stream_iter_idx);
+ lttng_live_stream_iterator *stream_iter =
+ live_trace->stream_iterators[stream_iter_idx].get();
/*
* If there is no current message for this stream, go fetch
/*
* If there is no current message for this stream, go fetch
* removed element with the array's last
* element.
*/
* removed element with the array's last
* element.
*/
- g_ptr_array_remove_index_fast(live_trace->stream_iterators, stream_iter_idx);
+ bt2c::vectorFastRemove(live_trace->stream_iterators, stream_iter_idx);
* The only case where we don't have a candidate for this trace
* is if we reached the end of all the iterators.
*/
* The only case where we don't have a candidate for this trace
* is if we reached the end of all the iterators.
*/
- BT_ASSERT(live_trace->stream_iterators->len == 0);
+ BT_ASSERT(live_trace->stream_iterators.empty());
stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END;
}
stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END;
}
const bt_clock_class *clock_class = nullptr;
const bt_clock_class *clock_class = nullptr;
- /* Array of pointers to struct lttng_live_stream_iterator. */
- /* Owned by this. */
- GPtrArray *stream_iterators = nullptr;
+ std::vector<lttng_live_stream_iterator::UP> stream_iterators;
enum lttng_live_metadata_stream_state metadata_stream_state =
LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;
enum lttng_live_metadata_stream_state metadata_stream_state =
LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED;