Extract adding a trace to the iterator from bt_iter_init
authorJulien Desfossez <jdesfossez@efficios.com>
Wed, 5 Feb 2014 23:34:24 +0000 (18:34 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sat, 8 Feb 2014 15:39:01 +0000 (10:39 -0500)
With live tracing, we have cases where we need to add traces to an
iterator currently in use. Here, we just extract the code from
bt_iter_init that adds the trace to the iterator so we can call it from
elsewhere.
We don't necessarily want to expose this interface to the public, so it
stays in the internal headers for now.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/babeltrace/iterator-internal.h
lib/iterator.c

index 2b0b2f23c2b5460b55ce86e9b5ad78a7c15af0a2..d0cc2877586fe213510d45ac8390251b27ddb8ad 100644 (file)
@@ -67,5 +67,7 @@ int bt_iter_init(struct bt_iter *iter,
                const struct bt_iter_pos *begin_pos,
                const struct bt_iter_pos *end_pos);
 void bt_iter_fini(struct bt_iter *iter);
+int bt_iter_add_trace(struct bt_iter *iter,
+               struct bt_trace_descriptor *td_read);
 
 #endif /* _BABELTRACE_ITERATOR_INTERNAL_H */
index fd58dec99ce45dc4e8a682220d20ebf3a6edb3dc..5e8a8ce8bee097059ff1c1d8d92e0f55ab611717 100644 (file)
@@ -659,12 +659,60 @@ static int babeltrace_filestream_seek(struct ctf_file_stream *file_stream,
        return ret;
 }
 
+int bt_iter_add_trace(struct bt_iter *iter,
+               struct bt_trace_descriptor *td_read)
+{
+       struct ctf_trace *tin;
+       int stream_id, ret;
+
+       tin = container_of(td_read, struct ctf_trace, parent);
+
+       /* Populate heap with each stream */
+       for (stream_id = 0; stream_id < tin->streams->len;
+                       stream_id++) {
+               struct ctf_stream_declaration *stream;
+               int filenr;
+
+               stream = g_ptr_array_index(tin->streams, stream_id);
+               if (!stream)
+                       continue;
+               for (filenr = 0; filenr < stream->streams->len;
+                               filenr++) {
+                       struct ctf_file_stream *file_stream;
+                       struct bt_iter_pos pos;
+
+                       file_stream = g_ptr_array_index(stream->streams,
+                                       filenr);
+                       if (!file_stream)
+                               continue;
+
+                       pos.type = BT_SEEK_BEGIN;
+                       ret = babeltrace_filestream_seek(file_stream,
+                                       &pos, stream_id);
+
+                       if (ret == EOF) {
+                               ret = 0;
+                               continue;
+                       } else if (ret != 0 && ret != EAGAIN) {
+                               goto error;
+                       }
+                       /* Add to heap */
+                       ret = bt_heap_insert(iter->stream_heap, file_stream);
+                       if (ret)
+                               goto error;
+               }
+       }
+
+error:
+       return ret;
+}
+
 int bt_iter_init(struct bt_iter *iter,
                struct bt_context *ctx,
                const struct bt_iter_pos *begin_pos,
                const struct bt_iter_pos *end_pos)
 {
-       int i, stream_id;
+       int i;
        int ret = 0;
 
        if (!iter || !ctx)
@@ -685,49 +733,14 @@ int bt_iter_init(struct bt_iter *iter,
                goto error_heap_init;
 
        for (i = 0; i < ctx->tc->array->len; i++) {
-               struct ctf_trace *tin;
                struct bt_trace_descriptor *td_read;
 
                td_read = g_ptr_array_index(ctx->tc->array, i);
                if (!td_read)
                        continue;
-               tin = container_of(td_read, struct ctf_trace, parent);
-
-               /* Populate heap with each stream */
-               for (stream_id = 0; stream_id < tin->streams->len;
-                               stream_id++) {
-                       struct ctf_stream_declaration *stream;
-                       int filenr;
-
-                       stream = g_ptr_array_index(tin->streams, stream_id);
-                       if (!stream)
-                               continue;
-                       for (filenr = 0; filenr < stream->streams->len;
-                                       filenr++) {
-                               struct ctf_file_stream *file_stream;
-                               struct bt_iter_pos pos;
-
-                               file_stream = g_ptr_array_index(stream->streams,
-                                               filenr);
-                               if (!file_stream)
-                                       continue;
-
-                               pos.type = BT_SEEK_BEGIN;
-                               ret = babeltrace_filestream_seek(file_stream,
-                                       &pos, stream_id);
-
-                               if (ret == EOF) {
-                                       ret = 0;
-                                       continue;
-                               } else if (ret != 0 && ret != EAGAIN) {
-                                       goto error;
-                               }
-                               /* Add to heap */
-                               ret = bt_heap_insert(iter->stream_heap, file_stream);
-                               if (ret)
-                                       goto error;
-                       }
-               }
+               ret = bt_iter_add_trace(iter, td_read);
+               if (ret < 0)
+                       goto error;
        }
 
        ctx->current_iterator = iter;
This page took 0.034289 seconds and 4 git commands to generate.