I can now recreate the memory bloat using a basic NIH D-Bus server program and associated client program.
1) Run the server as: $ ./test_nih_dbus_server unix:abstract=/com/hunt/james/foo com.hunt.james.Foo /com/hunt/james/Foo 2) Run the client as: $ ./test_nih_dbus_client unix:abstract=/com/hunt/james/foo com.hunt.james.Foo 3) Run the updated spammer as: $ ./spam_dbus_server.sh 4) Run top and watch the memory used by test_nih_dbus_server creep up. The problem seems to be caused by the call to notify_clients() - this sends a signal to every connected client every time the spam_dbus_server.sh sends its data to the server. Commenting out the call to notify_clients() stop the memory bloating issue. The function echo_handled() that is called by notify_clients() is analogous to control_emit_event_emitted() in Upstart parlance. Again, running valgrind on the server shows the same stack traces as above: ==30015== 91,750,175 bytes in 7,617 blocks are still reachable in loss record 164 of 164 ==30015== at 0x402BB88: realloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==30015== by 0x408E778: dbus_realloc (dbus-memory.c:678) ==30015== by 0x408F08C: reallocate_for_length (dbus-string.c:349) ==30015== by 0x408F12B: set_length (dbus-string.c:390) ==30015== by 0x408F1A9: open_gap (dbus-string.c:411) ==30015== by 0x408FA67: copy (dbus-string.c:1198) ==30015== by 0x408FCCE: _dbus_string_copy_len (dbus-string.c:1368) ==30015== by 0x408DCF8: marshal_len_followed_by_bytes (dbus-marshal-basic.c:726) ==30015== by 0x408DD95: marshal_string (dbus-marshal-basic.c:758) ==30015== by 0x408DF60: _dbus_marshal_write_basic (dbus-marshal-basic.c:840) ==30015== by 0x4075CD7: _dbus_type_writer_write_basic_no_typecode (dbus-marshal-recursive.c:1601) ==30015== by 0x40768BB: _dbus_type_writer_write_basic (dbus-marshal-recursive.c:2323) ** Attachment added: "test_nih_dbus_server.c" https://bugs.launchpad.net/ubuntu/+source/unity/+bug/1235649/+attachment/3878663/+files/test_nih_dbus_server.c -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1235649 Title: uevent spam causes libdbus client code in session upstart to consume massive amounts of memory on Ubuntu Touch Status in Upstart: New Status in “linux” package in Ubuntu: Invalid Status in “systemd” package in Ubuntu: Invalid Status in “unity” package in Ubuntu: New Status in “upstart” package in Ubuntu: Fix Released Status in “linux” source package in Saucy: Invalid Status in “systemd” source package in Saucy: Invalid Status in “unity” source package in Saucy: New Status in “upstart” source package in Saucy: Fix Released Bug description: using ubuntu touch image 82 i see the session init consume about 10MB per minute as long as the screen is on with Mir. running the same session with surfaceflinger only consumes 1MB per minute. in both cases the system starts to swap heavily at some point, making the UI unresponsive. http://paste.ubuntu.com/6196223/ has the top output of a Mir session after 30min, the UI just got completely unresponsive when this snapshot was taken. http://paste.ubuntu.com/6196332/ is the top output of a surfaceflinger session where the screen was off for about 10min apparently the leak only occurs while the screen is on, it seems to be permanently there but in the case of surfaceflinger it hits less hard. To manage notifications about this bug go to: https://bugs.launchpad.net/upstart/+bug/1235649/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp