X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=converter%2Fbabeltrace-lib.c;h=80c373fee99d4975538dbab7c8eb05398b81639d;hp=176eff3cf9319712a0956bb914d7548bc8695dbe;hb=ee126a93135987994d5621de6168f23236aea217;hpb=8ee2fac4c2d886e6f5eb72f5c29fc284e267f791 diff --git a/converter/babeltrace-lib.c b/converter/babeltrace-lib.c index 176eff3c..80c373fe 100644 --- a/converter/babeltrace-lib.c +++ b/converter/babeltrace-lib.c @@ -406,8 +406,31 @@ error_malloc: void babeltrace_iter_destroy(struct babeltrace_iter *iter) { + struct bt_stream_callbacks *bt_stream_cb; + struct bt_callback_chain *bt_chain; + int i, j; + heap_free(iter->stream_heap); g_free(iter->stream_heap); + + /* free all events callbacks */ + if (iter->main_callbacks.callback) + g_array_free(iter->main_callbacks.callback, TRUE); + + /* free per-event callbacks */ + for (i = 0; i < iter->callbacks->len; i++) { + bt_stream_cb = &g_array_index(iter->callbacks, + struct bt_stream_callbacks, i); + if (!bt_stream_cb || !bt_stream_cb->per_id_callbacks) + continue; + for (j = 0; j < bt_stream_cb->per_id_callbacks->len; j++) { + bt_chain = &g_array_index(bt_stream_cb->per_id_callbacks, + struct bt_callback_chain, j); + g_array_free(bt_chain->callback, TRUE); + } + g_array_free(bt_stream_cb->per_id_callbacks, TRUE); + } + free(iter); }