Dan, thanks for looking at the patch and for your question!
I tried to explain this a bit in comment #1, not too much detailed though: "[...]closing session should be somehow added to gc [...] and then (the gc) performs the clean-up. To include a session in gc, the function session_add_to_gc_queue() should be called. [...] (this) patch proactively puts a session in gc on session_remove_fifo(). This function is always called in the event of Release a session - when the ssh ends, for example. [...]" Being a bit more specific: when SSH ends, for example, a Release event is sent through dbus and systemd-logind captures it, in the function manager_message_handler(). >From there, the function session_remove_fifo() is called. That point is our >"bootstrap" to add the closing session on gc, our first addition there. But unfortunately due to an unpredictable timing of cgroup become empty for that session, the gc might fail to remove the session right in that moment. So, we need to re-add the closing session to gc from...within the gc! In my experiments, 2 or 3 re-additions are enough to get the session removed. It wouldn't be necessary to do these 2 steps above IF the cgroup empty notification was working fine. In that case, after the cgroup for the closing session become empty, a notification handler would be triggered in the systemd-logind and that handler would add the session to gc, and then gc would clean it up. But, since in Trusty we have upstart as our init system (and systemd is highly patched to co-exist in this fashion) and cgroup empty notifications were broken in systemd (until a complete refactor of cgroup handling in systemd), our approach here is the less expensive one. In summary, the above 2 steps [adding the session to gc in session_remove_fifo() and re-adding it from within gc] are the most important parts of this patch - without them we leak entire sessions and eventually the logind process gets OOM'ed. Thanks, Guilherme -- You received this bug notification because you are a member of Ubuntu Bugs, which is subscribed to Ubuntu. https://bugs.launchpad.net/bugs/1750013 Title: systemd-logind: memory leaks on session's connections (trusty-only) To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1750013/+subscriptions -- ubuntu-bugs mailing list [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs
