From 2c5567cd652c20d13788040a78efb5820274da98 Mon Sep 17 00:00:00 2001 From: Christophe Fergeau Date: Sat, 17 Oct 2015 22:57:52 +0200 Subject: [PATCH] item: Free SecreItem::value in finalize() This fixes: ==20768== 67 (40 direct, 27 indirect) bytes in 1 blocks are definitely lost in loss record 1,133 of 1,588 ==20768== at 0x4C28C50: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==20768== by 0x6002FCC: g_malloc (gmem.c:94) ==20768== by 0x601B523: g_slice_alloc (gslice.c:1007) ==20768== by 0x601B563: g_slice_alloc0 (gslice.c:1032) ==20768== by 0x4E5FB64: secret_value_new_full (secret-value.c:140) ==20768== by 0x4E67B63: service_decode_aes_secret (secret-session.c:457) ==20768== by 0x4E67D6B: _secret_session_decode_secret (secret-session.c:513) ==20768== by 0x4E50A61: on_item_load_secret (secret-item.c:1157) ==20768== by 0x5A3346D: g_task_return_now (gtask.c:1104) ==20768== by 0x5A33575: g_task_return (gtask.c:1162) ==20768== by 0x5A33E76: g_task_return_pointer (gtask.c:1537) ==20768== by 0x5AAC7E6: reply_cb (gdbusproxy.c:2579) ==20768== by 0x5A3346D: g_task_return_now (gtask.c:1104) ==20768== by 0x5A33575: g_task_return (gtask.c:1162) ==20768== by 0x5A33E76: g_task_return_pointer (gtask.c:1537) ==20768== by 0x5A9BB7D: g_dbus_connection_call_done (gdbusconnection.c:5704) ==20768== by 0x5A3346D: g_task_return_now (gtask.c:1104) ==20768== by 0x5A334B6: complete_in_idle_cb (gtask.c:1118) ==20768== by 0x5FFD3D0: g_idle_dispatch (gmain.c:5441) ==20768== by 0x5FFAA18: g_main_dispatch (gmain.c:3154) ==20768== by 0x5FFB85C: g_main_context_dispatch (gmain.c:3769) ==20768== by 0x5FFBA40: g_main_context_iterate (gmain.c:3840) ==20768== by 0x5FFBE66: g_main_loop_run (gmain.c:4034) ==20768== by 0x4E510DA: secret_item_load_secret_sync (secret-item.c:1311) ==20768== by 0x405238: test_load_secret_sync (test-item.c:592) ==20768== by 0x60258FA: test_case_run (gtestutils.c:2158) ==20768== by 0x6025CBB: g_test_run_suite_internal (gtestutils.c:2241) ==20768== by 0x6025D64: g_test_run_suite_internal (gtestutils.c:2253) ==20768== by 0x6025F7B: g_test_run_suite (gtestutils.c:2328) ==20768== by 0x6024C1C: g_test_run (gtestutils.c:1596) ==20768== by 0x4E7CA25: egg_tests_run_with_loop (egg-testing.c:167) ==20768== by 0x406B52: main (test-item.c:887) https://bugzilla.gnome.org/show_bug.cgi?id=756766 --- libsecret/secret-item.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libsecret/secret-item.c b/libsecret/secret-item.c index 1b11501..59c715b 100644 --- a/libsecret/secret-item.c +++ b/libsecret/secret-item.c @@ -267,6 +267,9 @@ secret_item_finalize (GObject *obj) g_object_remove_weak_pointer (G_OBJECT (self->pv->service), (gpointer *)&self->pv->service); + if (self->pv->value != NULL) + secret_value_unref (self->pv->value); + g_mutex_clear (&self->pv->mutex); G_OBJECT_CLASS (secret_item_parent_class)->finalize (obj);