From: Julien Desfossez Date: Tue, 13 Sep 2011 21:15:28 +0000 (-0400) Subject: Free the callbacks on iter_destroy X-Git-Tag: v0.7~14 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=ee126a93135987994d5621de6168f23236aea217;hp=8ee2fac4c2d886e6f5eb72f5c29fc284e267f791 Free the callbacks on iter_destroy [ edit : use TRUE instead of 1 ] Signed-off-by: Julien Desfossez Signed-off-by: Mathieu Desnoyers --- 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); }