X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=converter%2Fbabeltrace.c;h=ae0cbecc51bba1c0b136765a8a8a2173f41a4ac5;hb=5cb9b55796490a0ac4c3f7cd647d11f7329f9646;hp=39cf424423f3d48a116b9c2f5de8080974d63317;hpb=7da9b2f355093d2bd1a91e9779adb87f783f872a;p=babeltrace.git diff --git a/converter/babeltrace.c b/converter/babeltrace.c index 39cf4244..ae0cbecc 100644 --- a/converter/babeltrace.c +++ b/converter/babeltrace.c @@ -624,12 +624,10 @@ end: static struct bt_ctf_iter *iter_create_intersect(struct bt_context *ctx, - struct bt_iter_pos *inter_begin_pos, - struct bt_iter_pos *inter_end_pos) + struct bt_iter_pos **inter_begin_pos, + struct bt_iter_pos **inter_end_pos) { uint64_t begin = 0, end = ULLONG_MAX; - /* Useless but needed for bt_iter_create_time_pos. */ - struct bt_iter bt_iter; int ret; ret = ctf_find_packets_intersection(ctx, &begin, &end); @@ -640,17 +638,22 @@ struct bt_ctf_iter *iter_create_intersect(struct bt_context *ctx, } else if (ret != 0) { goto error; } - inter_begin_pos = bt_iter_create_time_pos(&bt_iter, begin); - if (!inter_begin_pos) { + *inter_begin_pos = bt_iter_create_time_pos(NULL, begin); + if (!(*inter_begin_pos)) { goto error; } - inter_end_pos = bt_iter_create_time_pos(&bt_iter, end); - if (!inter_end_pos) { + *inter_end_pos = bt_iter_create_time_pos(NULL, end); + if (!(*inter_end_pos)) { goto error; } - return bt_ctf_iter_create(ctx, inter_begin_pos, - inter_end_pos); + /* + * bt_ctf_iter does not take ownership of begin and end positions, + * so we return them to the caller who must still assume their ownership + * until the iterator is destroyed. + */ + return bt_ctf_iter_create(ctx, *inter_begin_pos, + *inter_end_pos); error: return NULL; } @@ -661,8 +664,7 @@ int convert_trace(struct bt_trace_descriptor *td_write, { struct bt_ctf_iter *iter; struct ctf_text_stream_pos *sout; - struct bt_iter_pos begin_pos; - struct bt_iter_pos *inter_begin_pos = NULL, *inter_end_pos = NULL; + struct bt_iter_pos *begin_pos = NULL, *end_pos = NULL; struct bt_ctf_event *ctf_event; int ret; @@ -674,10 +676,11 @@ int convert_trace(struct bt_trace_descriptor *td_write, } if (opt_stream_intersection) { - iter = iter_create_intersect(ctx, inter_begin_pos, inter_end_pos); + iter = iter_create_intersect(ctx, &begin_pos, &end_pos); } else { - begin_pos.type = BT_SEEK_BEGIN; - iter = bt_ctf_iter_create(ctx, &begin_pos, NULL); + begin_pos = bt_iter_create_time_pos(NULL, 0); + begin_pos->type = BT_SEEK_BEGIN; + iter = bt_ctf_iter_create(ctx, begin_pos, NULL); } if (!iter) { ret = -1; @@ -699,12 +702,8 @@ int convert_trace(struct bt_trace_descriptor *td_write, end: bt_ctf_iter_destroy(iter); error_iter: - if (inter_begin_pos) { - bt_iter_free_pos(inter_begin_pos); - } - if (inter_end_pos) { - bt_iter_free_pos(inter_end_pos); - } + bt_iter_free_pos(begin_pos); + bt_iter_free_pos(end_pos); return ret; }