From 3d2576f58690dc3069d918f5a737192028e45f8b Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Tue, 23 May 2017 23:24:17 +0200 Subject: Fixed memory leaks by destroying delayed works after processing. --- ChangeLog | 11 +++++++++++ src/analysis/disass/area.c | 2 ++ src/analysis/disass/output.c | 2 ++ src/glibext/delayed.c | 2 +- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 1a4b6cd..fab1917 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +17-05-23 Cyrille Bagard + + * src/analysis/disass/area.c: + Keep some collectors for later processing. + + * src/analysis/disass/output.c: + Delete all references to dead objects as intented. + + * src/glibext/delayed.c: + Fix memory leaks by destroying delayed works after processing. + 17-05-22 Cyrille Bagard * src/analysis/disass/area.c: diff --git a/src/analysis/disass/area.c b/src/analysis/disass/area.c index 030d58e..06893ff 100644 --- a/src/analysis/disass/area.c +++ b/src/analysis/disass/area.c @@ -1578,6 +1578,7 @@ mem_area *collect_memory_areas(wgroup_id_t gid, GtkStatusStack *status, GLoadedB collectors[i] = g_area_collector_new_intro(id, binary, first, last, closing); + g_object_ref(G_OBJECT(collectors[i])); g_work_queue_schedule_work(queue, G_DELAYED_WORK(collectors[i]), gid); } @@ -1944,6 +1945,7 @@ GArchInstruction **collect_disassembled_instructions(wgroup_id_t gid, GtkStatusS collectors[i] = g_area_collector_new_outro(id, list, begin, end); + g_object_ref(G_OBJECT(collectors[i])); g_work_queue_schedule_work(queue, G_DELAYED_WORK(collectors[i]), gid); } diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c index 40cd12b..063280c 100644 --- a/src/analysis/disass/output.c +++ b/src/analysis/disass/output.c @@ -344,6 +344,8 @@ void print_disassembled_instructions(GBufferCache *cache, GCodingLanguage *lang, assert(comment_index == comment_count); + _g_preload_info_drain_comments(info); + g_preload_info_unlock_comments(info); gtk_status_stack_remove_activity(status, id); diff --git a/src/glibext/delayed.c b/src/glibext/delayed.c index 20f9d0f..ddd84a0 100644 --- a/src/glibext/delayed.c +++ b/src/glibext/delayed.c @@ -603,7 +603,7 @@ static void *g_work_group_process(GWorkGroup *group) g_delayed_work_process(work, group->status); - //g_object_unref(G_OBJECT(work)); // FIXME + g_object_unref(G_OBJECT(work)); if (g_atomic_int_dec_and_test(&group->pending)) g_cond_broadcast(&group->wait_cond); -- cgit v0.11.2-87-g4458