GNOME Bugzilla – Bug 478435
several memory leaks
Last modified: 2008-04-22 10:18:45 UTC
I just had a few spare minutes and fixed these leaks in goobox: ==2658== 2,324 (1,596 direct, 728 indirect) bytes in 21 blocks are definitely lost in loss record 14,657 of 15,326 ==2658== at 0x402398E: calloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==2658== by 0x4FA976D: g_malloc0 (gmem.c:150) ==2658== by 0x8081304: track_info_new (track-info.c:40) ==2658== by 0x808146F: track_info_copy (track-info.c:108) ==2658== by 0x8064DBE: album_info_get_track (album-info.c:254) ==2658== by 0x807C95E: player_done_cb (goo-window.c:494) ==2658== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==2658== by 0x4F406C7: g_closure_invoke (gclosure.c:490) ==2658== by 0x4F54E9C: signal_emit_unlocked_R (gsignal.c:2440) ==2658== by 0x4F56AA6: g_signal_emit_valist (gsignal.c:2199) ==2658== by 0x4F56D6F: g_signal_emit_by_name (gsignal.c:2267) ==2658== by 0x80716F7: action_done (goo-player.c:198) ==6096== 19,252 (52 direct, 19,200 indirect) bytes in 1 blocks are definitely lost in loss record 14,959 of 15,652 ==6096== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==6096== by 0x4FA97F5: g_malloc (gmem.c:131) ==6096== by 0x4FBDE87: g_slice_alloc (gslice.c:824) ==6096== by 0x4FBE674: g_slice_alloc0 (gslice.c:833) ==6096== by 0x4F60BB9: g_type_create_instance (gtype.c:1549) ==6096== by 0x4F460E1: g_object_constructor (gobject.c:1046) ==6096== by 0x4F468AD: g_object_newv (gobject.c:937) ==6096== by 0x4F47467: g_object_new_valist (gobject.c:1027) ==6096== by 0x4F4756F: g_object_new (gobject.c:795) ==6096== by 0x4990F83: gdk_pixbuf_new_from_data (gdk-pixbuf-data.c:65) ==6096== by 0x498F02F: gdk_pixbuf_new (gdk-pixbuf.c:273) ==6096== by 0x4995923: gdk_pixbuf_scale_simple (gdk-pixbuf-scale.c:254) ==6096== by 0x49965DE: get_scaled_pixbuf (gdk-pixbuf-scaled-anim.c:141) ==6096== by 0x4990DC4: gdk_pixbuf_animation_get_static_image (gdk-pixbuf-animation.c:348) ==6096== by 0x4992858: gdk_pixbuf_new_from_file_at_scale (gdk-pixbuf-io.c:1145) ==6096== by 0x4992A7D: gdk_pixbuf_new_from_file_at_size (gdk-pixbuf-io.c:1008) ==6096== by 0x8074248: goo_player_info_set_cover (goo-player-info.c:915) ==6096== by 0x807435C: window_update_cover_cb (goo-player-info.c:955) ==2658== 10 bytes in 1 blocks are definitely lost in loss record 7,976 of 15,326 ==2658== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==2658== by 0x4FA97F5: g_malloc (gmem.c:131) ==2658== by 0x4FC14A8: g_strdup (gstrfuncs.c:91) ==2658== by 0x43C8329: set_string (gconf-value.c:55) ==2658== by 0x43C959F: gconf_value_copy (gconf-value.c:734) ==2658== by 0x43D2761: gconf_client_get_full (gconf-client.c:1297) ==2658== by 0x43D31ED: gconf_client_get_string (gconf-client.c:1485) ==2658== by 0x806F3FA: eel_gconf_get_string (gconf-utils.c:316) ==2658== by 0x8080E52: preferences_get_sort_type (preferences.c:233) ==2658== by 0x807A740: goo_window_new (goo-window.c:2305) ==2658== by 0x8080232: main (main.c:362) ==4340== 21 bytes in 21 blocks are definitely lost in loss record 3,753 of 15,649 ==4340== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==4340== by 0x4FA97F5: g_malloc (gmem.c:131) ==4340== by 0x4FC14A8: g_strdup (gstrfuncs.c:91) ==4340== by 0x80811EB: track_info_set_artist (track-info.c:155) ==4340== by 0x80814A6: track_info_copy (track-info.c:110) ==4340== by 0x8064DBE: album_info_get_track (album-info.c:254) ==4340== by 0x807C96E: player_done_cb (goo-window.c:494) ==4340== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==4340== by 0x4F406C7: g_closure_invoke (gclosure.c:490) ==4340== by 0x4F54E9C: signal_emit_unlocked_R (gsignal.c:2440) ==4340== by 0x4F56AA6: g_signal_emit_valist (gsignal.c:2199) ==4340== by 0x4F56D6F: g_signal_emit_by_name (gsignal.c:2267) ==4340== by 0x8071707: action_done (goo-player.c:198) ==4340== by 0x8072564: check_get_cd_tracks (goo-player.c:872) The PID differs as these are from different runs. The last two showed up several times per run.
Created attachment 95870 [details] [review] close those leaks This patch is supposed to fix those leaks. The chunk order should match the leak order from above.
Created attachment 96165 [details] [review] enhanced patch This is an enhanced version of the first patch which tries to fix the follwing leaks as well. ==17117== 3,118 (36 direct, 3,082 indirect) bytes in 3 blocks are definitely lost in loss record 3,725 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB87F5: g_malloc (gmem.c:131) ==17117== by 0x4FCCE87: g_slice_alloc (gslice.c:824) ==17117== by 0x4FAEDA1: g_list_copy (glist.c:314) ==17117== by 0x8081118: track_list_dup (track-info.c:179) ==17117== by 0x8064DF5: album_info_set_tracks (album-info.c:231) ==17117== by 0x8080CC5: get_album_list (metadata.c:126) ==17117== by 0x806972E: search_cb (dlg-properties.c:279) ==17117== by 0x4F5C97E: g_cclosure_marshal_VOID__VOID (gmarshal.c:77) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65DF8: g_signal_emit (gsignal.c:2243) ==17117== 222 bytes in 6 blocks are definitely lost in loss record 3,980 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB87F5: g_malloc (gmem.c:131) ==17117== by 0x4FD04A8: g_strdup (gstrfuncs.c:91) ==17117== by 0x8064F7F: album_info_set_id (album-info.c:124) ==17117== by 0x80807A4: get_album_list (metadata.c:51) ==17117== by 0x806972E: search_cb (dlg-properties.c:279) ==17117== by 0x4F5C97E: g_cclosure_marshal_VOID__VOID (gmarshal.c:77) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65DF8: g_signal_emit (gsignal.c:2243) ==17117== 16 bytes in 1 blocks are definitely lost in loss record 5,276 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB87F5: g_malloc (gmem.c:131) ==17117== by 0x4FD04A8: g_strdup (gstrfuncs.c:91) ==17117== by 0x806CEF8: get_temp_work_dir (file-utils.c:1020) ==17117== by 0x806562F: fetch_cover_image_from_name (dlg-cover-chooser.c:809) ==17117== by 0x807CAEC: player_done_cb (goo-window.c:1667) ==17117== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65D6F: g_signal_emit_by_name (gsignal.c:2267) ==17117== by 0x8071707: action_done (goo-player.c:198) ==17117== by 0x80723D1: goo_player_set_album (goo-player.c:645) ==17117== 74 bytes in 1 blocks are definitely lost in loss record 8,503 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB87F5: g_malloc (gmem.c:131) ==17117== by 0x4FD0D92: g_strconcat (gstrfuncs.c:258) ==17117== by 0x807BE21: goo_window_get_cover_filename (goo-window.c:1498) ==17117== by 0x807CA6E: player_done_cb (goo-window.c:1655) ==17117== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65D6F: g_signal_emit_by_name (gsignal.c:2267) ==17117== by 0x8071707: action_done (goo-player.c:198) ==17117== by 0x80723D1: goo_player_set_album (goo-player.c:645) ==17117== 12 bytes in 1 blocks are definitely lost in loss record 8,824 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB87F5: g_malloc (gmem.c:131) ==17117== by 0x4FD04A8: g_strdup (gstrfuncs.c:91) ==17117== by 0x80795FC: window_update_title (goo-window.c:1449) ==17117== by 0x807C884: player_done_cb (goo-window.c:1709) ==17117== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65D6F: g_signal_emit_by_name (gsignal.c:2267) ==17117== by 0x8071707: action_done (goo-player.c:198) ==17117== by 0x80730D0: cdrom_state_changed_cb (goo-player.c:552) ==17117== 32 bytes in 1 blocks are definitely lost in loss record 8,909 of 16,650 ==17117== at 0x4024942: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB86CA: g_realloc (gmem.c:168) ==17117== by 0x4FD14E9: g_string_maybe_expand (gstring.c:359) ==17117== by 0x4FD1F99: g_string_insert_len (gstring.c:694) ==17117== by 0x4FD2370: g_string_append (gstring.c:733) ==17117== by 0x4FA285A: g_build_path_va (gfileutils.c:1522) ==17117== by 0x4FA28EF: g_build_filename (gfileutils.c:1794) ==17117== by 0x8065E61: auto_fetch__search_result_saved_cb (dlg-cover-chooser.c:764) ==17117== by 0x806585C: copy_progress_update_cb (dlg-cover-chooser.c:153) ==17117== by 0x426BAA1: dispatch_sync_job_callback (gnome-vfs-job.c:283) ==17117== by 0x4FAF370: g_idle_dispatch (gmain.c:4132) ==17117== by 0x4FB0F44: g_main_context_dispatch (gmain.c:2061) ==17117== 8,192 bytes in 1 blocks are definitely lost in loss record 16,629 of 16,650 ==17117== at 0x4024868: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x40249BC: realloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==17117== by 0x4FB86CA: g_realloc (gmem.c:168) ==17117== by 0x4FD14E9: g_string_maybe_expand (gstring.c:359) ==17117== by 0x4FD24F0: g_string_sized_new (gstring.c:384) ==17117== by 0x4FAA271: g_key_file_to_data (gkeyfile.c:1014) ==17117== by 0x807BEFD: goo_window_set_current_cd_autofetch (goo-window.c:1559) ==17117== by 0x807CA63: player_done_cb (goo-window.c:1653) ==17117== by 0x8056AF7: goo_marshal_VOID__INT_POINTER (goo-marshal.c:84) ==17117== by 0x4F4F6C7: g_closure_invoke (gclosure.c:490) ==17117== by 0x4F63E9C: signal_emit_unlocked_R (gsignal.c:2440) ==17117== by 0x4F65AA6: g_signal_emit_valist (gsignal.c:2199) ==17117== by 0x4F65D6F: g_signal_emit_by_name (gsignal.c:2267) ==17117== by 0x8071707: action_done (goo-player.c:198) ==17117== by 0x80723D1: goo_player_set_album (goo-player.c:645) Some of them appear several times and with varying amounts of lost data in Valgrind's log.
thanks Felix, I'll apply the patch to svn as soon as possible.
patch applied to trunk, thanks again.