i ran valgrind to get an initial idea. test: search for google in gwibber, wait for about 12 notifications, get this: First a few probably obvious leaks (stripped a bit); further down the full valgrind output. ==16630== ==16630== ==16630== 58,336 (15,360 direct, 42,976 indirect) bytes in 23 blocks are definitely lost in loss record 202 of 218 ==16630== at 0x4C279E1: realloc (vg_replace_malloc.c:429) ==16630== by 0xA85701B: FcPatternObjectInsertElt (fcpat.c:358) ==16630== by 0xA857ADC: FcPatternObjectAddWithBinding (fcpat.c:515) ==16630== by 0xA84D12F: FcDefaultSubstitute (fcdefault.c:136) ==16630== by 0xA180A9A: (within /usr/lib/libpangoft2-1.0.so.0.2400.5) ==16630== by 0x7031F18: pango_context_get_metrics (in /usr/lib/libpango-1.0.so.0.2400.5) ==16630== by 0x4192E1: defaults_constructed (defaults.c:409) ==16630== by 0x7274DE2: g_object_newv (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== ==16630== ==16630== 27,616 (2,368 direct, 25,248 indirect) bytes in 8 blocks are definitely lost in loss record 205 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0x6DAF303: (within /usr/lib/libcairo.so.2.10800.8) ==16630== by 0x6DAF657: (within /usr/lib/libcairo.so.2.10800.8) ==16630== by 0x412776: _refresh_background (bubble.c:517) ==16630== by 0x41373E: bubble_recalc_size (bubble.c:3268) ==16630== by 0x41AFA9: stack_notify_handler (stack.c:645) ==16630== by 0x41A095: ==16630== 1,362,696 (54,552 direct, 1,308,144 indirect) bytes in 39 blocks are definitely lost in loss record 217 of 218 ==16630== at 0x4C25684: calloc (vg_replace_malloc.c:397) ==16630== by 0x74ED187: g_malloc0 (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x41D2D7: tile_new (tile.c:56) ==16630== by 0x4118F6: _refresh_icon (bubble.c:780) ==16630== by 0x411CD9: bubble_set_icon (bubble.c:2249) ==16630== by 0x41B0CA: stack_notify_handler (stack.c:617) ==16630== by 0x41A095: dbus_glib_marshal_stack_VOID__STRING_UINT_STRING_STRING_STRING_BOXED_BOXED_INT_POINTER (stack-glue.h:100) Here the full: ==16630== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 14 from 2) ==16630== malloc/free: in use at exit: 4,703,720 bytes in 13,166 blocks. ==16630== malloc/free: 79,139 allocs, 65,973 frees, 13,398,848 bytes allocated. ==16630== For counts of detected errors, rerun with: -v ==16630== searching for pointers to 13,166 not-freed blocks. ==16630== checked 3,839,584 bytes. ==16630== ==16630== 9 bytes in 1 blocks are definitely lost in loss record 8 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0xA859A93: FcStrCopy (fcstr.c:42) ==16630== by 0xA85CFD4: FcEndElement (fcxml.c:1936) ==16630== by 0xCBEAC52: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBEBB93: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBED709: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBEDE2A: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBE4040: XML_ParseBuffer (in /usr/lib/libexpat.so.1.5.2) ==16630== by 0xA85B4F8: FcConfigParseAndLoad (fcxml.c:2552) ==16630== by 0xA85B7DD: FcConfigParseAndLoad (fcxml.c:2438) ==16630== by 0xA85CC34: FcEndElement (fcxml.c:1648) ==16630== by 0xCBEAC52: (within /usr/lib/libexpat.so.1.5.2) ==16630== ==16630== ==16630== 300 (60 direct, 240 indirect) bytes in 1 blocks are definitely lost in loss record 52 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0x7A83D8A: nss_parse_service_list (nsswitch.c:618) ==16630== by 0x7A8467E: __nss_database_lookup (nsswitch.c:164) ==16630== by 0xD61633F: ??? ==16630== by 0xD616FEE: ??? ==16630== by 0x7A32B62: getpwnam_r@@GLIBC_2.2.5 (getXXbyYY_r.c:253) ==16630== by 0x75179AC: (within /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x751981C: g_get_home_dir (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x5AB60E6: gtk_rc_add_initial_default_files (gtkrc.c:557) ==16630== by 0x5AB87BE: _gtk_rc_init (gtkrc.c:896) ==16630== by 0x5A609B4: post_parse_hook (gtkmain.c:719) ==16630== by 0x74F3557: g_option_context_parse (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== ==16630== ==16630== 112 bytes in 1 blocks are possibly lost in loss record 73 of 218 ==16630== at 0x4C279E1: realloc (vg_replace_malloc.c:429) ==16630== by 0x74ED10E: g_realloc (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x88E70BC: ORBit_realloc_tcval (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0x88EB173: ORBit_sequence_append (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0xFA0CC8D: bonobo_activation_init_activation_env (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xFA109A2: bonobo_activation_orb_init (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xFA10D60: bonobo_activation_init (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xF7B67F1: bonobo_init_full (in /usr/lib/libbonobo-2.so.0.0.0) ==16630== by 0xF31F503: (within /usr/lib/gtk-2.0/modules/libatk-bridge.so) ==16630== by 0x5A7E980: default_display_notify_cb (gtkmodules.c:424) ==16630== by 0x726E67D: g_closure_invoke (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x7284855: (within /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== ==16630== ==16630== 173 bytes in 34 blocks are definitely lost in loss record 88 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0x74ED1E2: g_malloc (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x7504BDD: g_strdup (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x504C873: (within /usr/lib/libgconf-2.so.4.1.5) ==16630== by 0x504DB44: gconf_value_copy (in /usr/lib/libgconf-2.so.4.1.5) ==16630== by 0x5058467: (within /usr/lib/libgconf-2.so.4.1.5) ==16630== by 0x5058B52: gconf_client_get_string (in /usr/lib/libgconf-2.so.4.1.5) ==16630== by 0x418E8E: _get_font_size_dpi (defaults.c:179) ==16630== by 0x419132: defaults_constructed (defaults.c:505) ==16630== by 0x7274DE2: g_object_newv (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x7275324: g_object_new_valist (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x727547B: g_object_new (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== ==16630== ==16630== 174 bytes in 8 blocks are possibly lost in loss record 89 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0x74ED1E2: g_malloc (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x88E718C: ORBit_alloc_string (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0x88E6E7C: CORBA_string_dup (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0x88EAFB6: ORBit_copy_value_core (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0x88EAD92: ORBit_copy_value_core (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0x88EB1A1: ORBit_sequence_append (in /usr/lib/libORBit-2.so.0.1.0) ==16630== by 0xFA0CC8D: bonobo_activation_init_activation_env (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xFA109A2: bonobo_activation_orb_init (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xFA10D60: bonobo_activation_init (in /usr/lib/libbonobo-activation.so.4.0.0) ==16630== by 0xF7B67F1: bonobo_init_full (in /usr/lib/libbonobo-2.so.0.0.0) ==16630== by 0xF31F503: (within /usr/lib/gtk-2.0/modules/libatk-bridge.so) ==16630== ==16630== ==16630== 576 (512 direct, 64 indirect) bytes in 2 blocks are definitely lost in loss record 132 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0xA85709A: FcPatternObjectInsertElt (fcpat.c:367) ==16630== by 0xA857ADC: FcPatternObjectAddWithBinding (fcpat.c:515) ==16630== by 0xA857BFC: FcPatternAppend (fcpat.c:991) ==16630== by 0xA85CBB0: FcEndElement (fcxml.c:2023) ==16630== by 0xCBEAC52: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBEBB93: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBED709: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBEDE2A: (within /usr/lib/libexpat.so.1.5.2) ==16630== by 0xCBE4040: XML_ParseBuffer (in /usr/lib/libexpat.so.1.5.2) ==16630== by 0xA85B4F8: FcConfigParseAndLoad (fcxml.c:2552) ==16630== by 0xA85B7DD: FcConfigParseAndLoad (fcxml.c:2438) ==16630== ==16630== ==16630== 2,452 bytes in 43 blocks are possibly lost in loss record 170 of 218 ==16630== at 0x4C25684: calloc (vg_replace_malloc.c:397) ==16630== by 0x74ED187: g_malloc0 (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x72888C5: (within /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x7288935: (within /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x728AA8C: g_type_init_with_debug_flags (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x5F7F121: gdk_pre_parse_libgtk_only (gdk.c:209) ==16630== by 0x5A6087E: pre_parse_hook (gtkmain.c:646) ==16630== by 0x74F319F: g_option_context_parse (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x5A60570: gtk_parse_args (gtkmain.c:918) ==16630== by 0x5A605C8: gtk_init_check (gtkmain.c:954) ==16630== by 0x5A605F8: gtk_init (gtkmain.c:992) ==16630== by 0x41972B: main (main.c:55) ==16630== ==16630== ==16630== 58,336 (15,360 direct, 42,976 indirect) bytes in 23 blocks are definitely lost in loss record 202 of 218 ==16630== at 0x4C279E1: realloc (vg_replace_malloc.c:429) ==16630== by 0xA85701B: FcPatternObjectInsertElt (fcpat.c:358) ==16630== by 0xA857ADC: FcPatternObjectAddWithBinding (fcpat.c:515) ==16630== by 0xA84D12F: FcDefaultSubstitute (fcdefault.c:136) ==16630== by 0xA180A9A: (within /usr/lib/libpangoft2-1.0.so.0.2400.5) ==16630== by 0x7031F18: pango_context_get_metrics (in /usr/lib/libpango-1.0.so.0.2400.5) ==16630== by 0x4192E1: defaults_constructed (defaults.c:409) ==16630== by 0x7274DE2: g_object_newv (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x7275324: g_object_new_valist (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x727547B: g_object_new (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x419742: main (main.c:61) ==16630== ==16630== ==16630== 27,616 (2,368 direct, 25,248 indirect) bytes in 8 blocks are definitely lost in loss record 205 of 218 ==16630== at 0x4C278AE: malloc (vg_replace_malloc.c:207) ==16630== by 0x6DAF303: (within /usr/lib/libcairo.so.2.10800.8) ==16630== by 0x6DAF657: (within /usr/lib/libcairo.so.2.10800.8) ==16630== by 0x412776: _refresh_background (bubble.c:517) ==16630== by 0x41373E: bubble_recalc_size (bubble.c:3268) ==16630== by 0x41AFA9: stack_notify_handler (stack.c:645) ==16630== by 0x41A095: dbus_glib_marshal_stack_VOID__STRING_UINT_STRING_STRING_STRING_BOXED_BOXED_INT_POINTER (stack-glue.h:100) ==16630== by 0x52797EB: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== by 0x5279CA4: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== by 0x54AB61D: (within /lib/libdbus-1.so.3.4.0) ==16630== by 0x549F3DB: dbus_connection_dispatch (in /lib/libdbus-1.so.3.4.0) ==16630== by 0x5276B64: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== ==16630== ==16630== 80,672 bytes in 46 blocks are possibly lost in loss record 213 of 218 ==16630== at 0x4C254D0: memalign (vg_replace_malloc.c:460) ==16630== by 0x4C2558A: posix_memalign (vg_replace_malloc.c:569) ==16630== by 0x7501821: (within /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x75028D9: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x72828E4: g_signal_connect_data (in /usr/lib/libgobject-2.0.so.0.2104.0) ==16630== by 0x5A7F475: _gtk_modules_init (gtkmodules.c:514) ==16630== by 0x5A609DA: post_parse_hook (gtkmain.c:728) ==16630== by 0x74F3557: g_option_context_parse (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x5A60570: gtk_parse_args (gtkmain.c:918) ==16630== by 0x5A605C8: gtk_init_check (gtkmain.c:954) ==16630== by 0x5A605F8: gtk_init (gtkmain.c:992) ==16630== by 0x41972B: main (main.c:55) ==16630== ==16630== ==16630== 1,362,696 (54,552 direct, 1,308,144 indirect) bytes in 39 blocks are definitely lost in loss record 217 of 218 ==16630== at 0x4C25684: calloc (vg_replace_malloc.c:397) ==16630== by 0x74ED187: g_malloc0 (in /usr/lib/libglib-2.0.so.0.2104.0) ==16630== by 0x41D2D7: tile_new (tile.c:56) ==16630== by 0x4118F6: _refresh_icon (bubble.c:780) ==16630== by 0x411CD9: bubble_set_icon (bubble.c:2249) ==16630== by 0x41B0CA: stack_notify_handler (stack.c:617) ==16630== by 0x41A095: dbus_glib_marshal_stack_VOID__STRING_UINT_STRING_STRING_STRING_BOXED_BOXED_INT_POINTER (stack-glue.h:100) ==16630== by 0x52797EB: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== by 0x5279CA4: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== by 0x54AB61D: (within /lib/libdbus-1.so.3.4.0) ==16630== by 0x549F3DB: dbus_connection_dispatch (in /lib/libdbus-1.so.3.4.0) ==16630== by 0x5276B64: (within /usr/lib/libdbus-glib-1.so.2.1.0) ==16630== ==16630== LEAK SUMMARY: ==16630== definitely lost: 73,034 bytes in 108 blocks. ==16630== indirectly lost: 1,376,672 bytes in 1,482 blocks. ==16630== possibly lost: 83,410 bytes in 98 blocks. ==16630== still reachable: 3,170,604 bytes in 11,478 blocks. ==16630== suppressed: 0 bytes in 0 blocks. ==16630== Reachable blocks (those to which a pointer was found) are not shown. ==16630== To see them, rerun with: --leak-check=full --show-reachable=yes