src.ctf.lttng-live: make lttng_live_stream_iterator::buf an std::vector
[babeltrace.git] / src / plugins / ctf / lttng-live / data-stream.cpp
index 5ba068c379eb1c372ff5382aa844d9916fe82f78..358768cb578473b54a2c8928be958aefdea9ff0d 100644 (file)
@@ -49,11 +49,11 @@ static enum ctf_msg_iter_medium_status medop_request_bytes(size_t request_sz, ui
         goto end;
     }
 
-    read_len = MIN(request_sz, stream->buflen);
+    read_len = MIN(request_sz, stream->buf.size());
     read_len = MIN(read_len, len_left);
-    status = lttng_live_get_stream_bytes(live_msg_iter, stream, stream->buf, stream->offset,
+    status = lttng_live_get_stream_bytes(live_msg_iter, stream, stream->buf.data(), stream->offset,
                                          read_len, &recv_len);
-    *buffer_addr = stream->buf;
+    *buffer_addr = stream->buf.data();
     *buffer_sz = recv_len;
     stream->offset += recv_len;
 end:
@@ -71,6 +71,8 @@ static bt_stream *medop_borrow_stream(bt_stream_class *stream_class, int64_t str
                         "Creating stream {} (ID: {}) out of stream class {}",
                         lttng_live_stream->name->str, stream_id, stream_class_id);
 
+        bt_stream *stream;
+
         if (stream_id < 0) {
             /*
              * No stream instance ID in the stream. It's possible
@@ -78,26 +80,27 @@ static bt_stream *medop_borrow_stream(bt_stream_class *stream_class, int64_t str
              * LTTng. In these cases, use the viewer_stream_id that
              * is unique for a live viewer session.
              */
-            lttng_live_stream->stream = bt_stream_create_with_id(
-                stream_class, lttng_live_stream->trace->trace, lttng_live_stream->viewer_stream_id);
+            stream =
+                bt_stream_create_with_id(stream_class, lttng_live_stream->trace->trace->libObjPtr(),
+                                         lttng_live_stream->viewer_stream_id);
         } else {
-            lttng_live_stream->stream = bt_stream_create_with_id(
-                stream_class, lttng_live_stream->trace->trace, (uint64_t) stream_id);
+            stream = bt_stream_create_with_id(
+                stream_class, lttng_live_stream->trace->trace->libObjPtr(), (uint64_t) stream_id);
         }
 
-        if (!lttng_live_stream->stream) {
+        if (!stream) {
             BT_CPPLOGE_APPEND_CAUSE_SPEC(
                 lttng_live_stream->logger,
                 "Cannot create stream {} (stream class ID {}, stream ID {})",
                 lttng_live_stream->name->str, stream_class_id, stream_id);
-            goto end;
+            return nullptr;
         }
 
-        bt_stream_set_name(lttng_live_stream->stream, lttng_live_stream->name->str);
+        lttng_live_stream->stream = bt2::Stream::Shared::createWithoutRef(stream);
+        lttng_live_stream->stream->name(lttng_live_stream->name->str);
     }
 
-end:
-    return lttng_live_stream->stream;
+    return lttng_live_stream->stream->libObjPtr();
 }
 
 static struct ctf_msg_iter_medium_ops medops = {
@@ -203,14 +206,7 @@ lttng_live_stream_iterator_create(struct lttng_live_session *session, uint64_t c
             goto error;
         }
     }
-    stream_iter->buf = g_new0(uint8_t, lttng_live->max_query_size);
-    if (!stream_iter->buf) {
-        BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
-                                     "Failed to allocate live stream iterator buffer");
-        goto error;
-    }
-
-    stream_iter->buflen = lttng_live->max_query_size;
+    stream_iter->buf.resize(lttng_live->max_query_size);
     stream_iter->name = g_string_new(NULL);
     if (!stream_iter->name) {
         BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
@@ -239,14 +235,6 @@ void lttng_live_stream_iterator_destroy(struct lttng_live_stream_iterator *strea
         return;
     }
 
-    if (stream_iter->stream) {
-        BT_STREAM_PUT_REF_AND_RESET(stream_iter->stream);
-    }
-
-    if (stream_iter->msg_iter) {
-        ctf_msg_iter_destroy(stream_iter->msg_iter);
-    }
-    g_free(stream_iter->buf);
     if (stream_iter->name) {
         g_string_free(stream_iter->name, TRUE);
     }
This page took 0.029046 seconds and 4 git commands to generate.