Created attachment 118548 [details] [review] Cancel pending activation on any activation error This fixes the error reporting if you make two attempts to activate a service that cannot be activated due to an error that is reported synchronously, such as a system service with no User= line in its .service file. This is easy to reproduce with the gdbus(1) tool, which sends an Introspect call in addition to the one you asked it to. If you try to activate a service using gdbus call --session -d com.example.FailToActivate \ -o / -m org.freedesktop.DBus.Peer.Ping then gdbus will actually send two method calls: one Introspect, and one Ping. The Introspect gets the correct error reply, but when dbus-daemon enters bus_activation_activate_service() for the Ping call, it sees that there is a pending activation and does an early-return. The pending activation does not finish until the timeout is reached. A couple of error cases handled this correctly, but the majority did not; make them all go into the same code path. --- While testing patches like <https://bugzilla.gnome.org/show_bug.cgi?id=755760>, I tried configuring the session dbus-daemon to use /bin/false as the service activation helper, as a way to verify that all activations were indeed going through systemd. The result was that a traditional service activated via gdbus(1) exhibited this bug.
This is a non-intrusive bug fix, so I intend to apply this to the 1.10 stable branch after review.
Comment on attachment 118548 [details] [review] Cancel pending activation on any activation error Review of attachment 118548 [details] [review]: ----------------------------------------------------------------- Looks good.
Fixed in git for 1.10.1 and 1.11.0, thanks.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.