X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fiterator.c;h=c6ee4c9c0dba3ebf53883a8ad4a7c7c53c1a2ada;hp=9faf4e9412a9f7becebf4834065ce735f12f7098;hb=bed54c92f5e3c9159b776105d17ab5b4c0d682c7;hpb=0be8b6b76e1767f8d5f6b4c974df9a7d01eb91bc diff --git a/lib/iterator.c b/lib/iterator.c index 9faf4e94..c6ee4c9c 100644 --- a/lib/iterator.c +++ b/lib/iterator.c @@ -199,7 +199,7 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) heap_free(iter->stream_heap); ret = heap_init(iter->stream_heap, 0, stream_compare); if (ret < 0) - goto error; + goto error_heap_init; for (i = 0; i < iter_pos->u.restore->stream_saved_pos->len; i++) { @@ -248,7 +248,7 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) heap_free(iter->stream_heap); ret = heap_init(iter->stream_heap, 0, stream_compare); if (ret < 0) - goto error; + goto error_heap_init; /* for each trace in the trace_collection */ for (i = 0; i < tc->array->len; i++) { @@ -279,7 +279,7 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) heap_free(iter->stream_heap); ret = heap_init(iter->stream_heap, 0, stream_compare); if (ret < 0) - goto error; + goto error_heap_init; for (i = 0; i < tc->array->len; i++) { struct ctf_trace *tin; @@ -331,12 +331,14 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) error: heap_free(iter->stream_heap); +error_heap_init: if (heap_init(iter->stream_heap, 0, stream_compare) < 0) { heap_free(iter->stream_heap); g_free(iter->stream_heap); iter->stream_heap = NULL; ret = -ENOMEM; } + return ret; } @@ -525,6 +527,7 @@ error: heap_free(iter->stream_heap); error_heap_init: g_free(iter->stream_heap); + iter->stream_heap = NULL; error_ctx: return ret; }