diff options
author | Lennart Poettering <lennart@poettering.net> | 2017-02-28 18:27:42 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2017-02-28 18:35:05 +0100 |
commit | a625def6ea3e6fb1ad78f40a9ff4454c4da79aca (patch) | |
tree | ec20e626f86241080c028e1f180940d9463bed83 /src | |
parent | ae572acd62fe80bbcf242e02e4947900682ded16 (diff) |
run: also pin unit when we we are in --pty mode
Since 95f1d6bfecde60b245fae1ab0313b550201e7880 we'll subscribe to unit
signals to figure out when to disconnect the pty. But that can only work
correctly if we actually subscribe to the unit's signals. Hence,
explicitly pin (and thus subscribe to) the unit we just created not only
in --wait mode but also in --pty mode.
Or to say this differently: we need to pin the unit in the same cases as
we install the signal match. 95f1d6bfecde60b245fae1ab0313b550201e7880
forgot to do that.
This is relevant to make sure systemd-run works correctly in --user
mode, and correctly exits when the spawned service dies. To test:
systemd-run --user -t /bin/bash
And then press ^D. This will hang before this change, but exit cleanly
after it.
Diffstat (limited to 'src')
-rw-r--r-- | src/run/run.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/src/run/run.c b/src/run/run.c index f8257abc93..2e6765aa18 100644 --- a/src/run/run.c +++ b/src/run/run.c @@ -497,7 +497,7 @@ static int transient_service_set_properties(sd_bus_message *m, char **argv, cons if (r < 0) return r; - if (arg_wait) { + if (arg_wait || arg_pty) { r = sd_bus_message_append(m, "(sv)", "AddRef", "b", 1); if (r < 0) return r; @@ -1026,7 +1026,6 @@ static int start_transient_service( pty_forward_set_handler(c.forward, pty_forward_handler, &c); } - path = unit_dbus_path_from_name(service); if (!path) return log_oom(); |