Skip to content
  • Simon McVittie's avatar
    Cancel pending activation on any activation error · 694d63b6
    Simon McVittie authored
    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.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=92200
    
    
    Reviewed-by: default avatarThiago Macieira <thiago@kde.org>
    694d63b6