aka gnomebug:168845

Gnome-settings-daemon allocates a bunch of stuff via GStreamer:

==13696== 64640 bytes in 354 blocks are still reachable in loss record 6489 of 6490
==13696==    at 0x3414AFEE: realloc (in /usr/lib/valgrind/vgpreload_addrcheck.so)
==13696==    by 0x413C3D70: g_realloc (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x413A6185: g_array_maybe_expand (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x413A72E8: g_array_append_vals (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x43ADD4C8: gst_structure_set_field (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43ADEB24: gst_structure_from_string (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AB20F8: gst_caps_from_string_inplace (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AB2B45: gst_caps_from_string (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AFAAF0: gst_xml_registry_parse_padtemplate (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AF7998: gst_xml_registry_text (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x413C3A13: g_markup_parse_context_parse (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x43AF9E79: gst_xml_registry_load (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AEDA58: gst_registry_load (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AEDFA7: _registry_load_func (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x413BA0EE: g_list_foreach (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696== 
==13696== 
==13696== 119552 bytes in 622 blocks are still reachable in loss record 6490 of 6490
==13696==    at 0x3414AFEE: realloc (in /usr/lib/valgrind/vgpreload_addrcheck.so)
==13696==    by 0x413C3D70: g_realloc (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x413A6185: g_array_maybe_expand (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x413A72E8: g_array_append_vals (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x43ADD4C8: gst_structure_set_field (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43ADEB24: gst_structure_from_string (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AB2173: gst_caps_from_string_inplace (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AB2B45: gst_caps_from_string (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AFAAF0: gst_xml_registry_parse_padtemplate (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AF7998: gst_xml_registry_text (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x413C3A13: g_markup_parse_context_parse (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696==    by 0x43AF9E79: gst_xml_registry_load (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AEDA58: gst_registry_load (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x43AEDFA7: _registry_load_func (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==13696==    by 0x413BA0EE: g_list_foreach (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==13696== 
==13696== LEAK SUMMARY:
==13696==    definitely lost: 4810 bytes in 61 blocks.
==13696==    possibly lost:   1856 bytes in 60 blocks.
==13696==    still reachable: 1484690 bytes in 35713 blocks.
==13696==         suppressed: 0 bytes in 0 blocks.

NB: there are tons of other gstreamer allocations. This is only the biggest one. It looks like gstreamer accounts for 20% or more of the allocations around here.

It turns out that this is just to implement changing the volume from Acme!

==19024==    by 0x413BA0EE: g_list_foreach (in /opt/gnome/lib/libglib-2.0.so.0.400.6)
==19024==    by 0x43AD428A: _gst_plugin_initialize (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==19024==    by 0x43AA9662: init_post (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==19024==    by 0x43AA9F9F: gst_init_check_with_popt_table (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==19024==    by 0x43AAA13A: gst_init_with_popt_table (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==19024==    by 0x43AAA189: gst_init (in /opt/gnome/lib/libgstreamer-0.8.so.1.0.0)
==19024==    by 0x8066F8B: acme_volume_gstreamer_class_init (in /opt/gnome/lib/control-center-2.0/gnome-settings-daemon)

How many people actually have a keybinding for volume control? Can we delay GStreamer initialization until that key is actually used?


Note by casual reader: I do. My girlfriend does. I've tought two of my friends to use Linux and Gnome - both of them happen to have multimedia keyboards and both of them use volume control keys. (VitezslavKotrla)

  • BenMaurer: yeah, at the very least it should be pay-as-you-go. However, the real solution is to find a way to do this without loading all the stuff from the disk.

Initiatives/MemoryReduction/Tasks/GstUseSoMuchMemoryOnSettingsDaemon (last edited 2013-11-22 21:16:21 by WilliamJonMcCann)