> static dbus_bool_t > handle_new_client_fd_and_unlock (DBusServer *server, > DBusSocket client_fd) > { > > [...] > > /* See if someone wants to handle this new connection, self-referencing > * for paranoia. > */ > new_connection_function = server->new_connection_function; > new_connection_data = server->new_connection_data; > > _dbus_server_ref_unlocked (server); > SERVER_UNLOCK (server); > > if (new_connection_function) > { > (* new_connection_function) (server, connection, > new_connection_data); > } > dbus_server_unref (server); > > /* If no one grabbed a reference, the connection will die. */ > _dbus_connection_close_if_only_one_ref (connection); > dbus_connection_unref (connection); > > We know that elogind is started after dbus-daemon has written its PID > file (there’s a Shepherd service dependency). Is there a possibility > that dbus-daemon writes its PID file before it has set > ‘new_connection_function’? Are PID files conventionally agreed to be synchronization primitives? In the case of systemd, I feel this may be more of an afterthought, given the system is designed to rely on socket-based activation. Still just guessing though, and your analysis above seems to suggest otherwise. > It would seem that ‘bus_context_new’ writes the PID file after it has > called ‘dbus_server_set_new_connection_function’ via ‘setup_server’ via > ‘process_config_first_time_only’. > > So not sure what happens. > > That’s it for today. Thoughts? Thank you! I'm sorry for my lack of deep analysis here, I've spent most of my evening attempting to fix my system just to boot ^^'. I've at least managed to collect the following verbose D-Bus log (54 MiB uncompressed) which hopefully can shed some light onto how this failure came to be.