#include <stdlib.h>
#include <babeltrace/babeltrace.h>
#include <babeltrace/callbacks-internal.h>
+#include <babeltrace/context.h>
#include <babeltrace/ctf/metadata.h>
#include <babeltrace/iterator-internal.h>
+#include <babeltrace/iterator.h>
#include <babeltrace/prio_heap.h>
struct stream_saved_pos {
if (ret == EOF)
return EOF;
else if (ret) {
- fprintf(stdout, "[error] Reading event failed.\n");
+ fprintf(stderr, "[error] Reading event failed.\n");
return ret;
}
return 0;
{
int i, stream_id;
int ret = 0;
- struct trace_collection *tc = iter->tc;
+ struct trace_collection *tc = iter->ctx->tc;
for (i = 0; i < tc->array->len; i++) {
struct ctf_trace *tin;
return ret;
}
-struct babeltrace_iter *babeltrace_iter_create(struct trace_collection *tc,
+struct babeltrace_iter *babeltrace_iter_create(struct bt_context *ctx,
struct trace_collection_pos *begin_pos,
struct trace_collection_pos *end_pos)
{
if (!iter)
goto error_malloc;
iter->stream_heap = g_new(struct ptr_heap, 1);
- iter->tc = tc;
iter->end_pos = end_pos;
iter->callbacks = g_array_new(0, 1, sizeof(struct bt_stream_callbacks));
iter->recalculate_dep_graph = 0;
iter->main_callbacks.callback = NULL;
iter->dep_gc = g_ptr_array_new();
+ if (bt_context_get(ctx) != 0)
+ goto error_ctx;
+ iter->ctx = ctx;
ret = heap_init(iter->stream_heap, 0, stream_compare);
if (ret < 0)
goto error_heap_init;
- for (i = 0; i < tc->array->len; i++) {
+ for (i = 0; i < ctx->tc->array->len; i++) {
struct ctf_trace *tin;
struct trace_descriptor *td_read;
- td_read = g_ptr_array_index(tc->array, i);
+ td_read = g_ptr_array_index(ctx->tc->array, i);
tin = container_of(td_read, struct ctf_trace, parent);
/* Populate heap with each stream */
heap_free(iter->stream_heap);
error_heap_init:
g_free(iter->stream_heap);
+error_ctx:
free(iter);
error_malloc:
return NULL;
g_array_free(bt_stream_cb->per_id_callbacks, TRUE);
}
+ bt_context_put(iter->ctx);
+
free(iter);
}