mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-13 12:58:20 +03:00
run: when disconnected from PTY forwarder, exit event loop if not --wait
Follow-up for ade0789fabbf01b95bf54d32f8cab1217a753f03 The change in behavior was partly intentional, as I think if both --wait and --pty are used, manually disconnecting from PTY forwarder should not result in systemd-run exiting with "Finished with ..." log. But we should check for --wait here. Closes #32953 (cherry picked from commit 2b4a691c32aadbc45491c8b243ec3cf7ed910f55) (cherry picked from commit 46561305cba2fcb64726616e88c7b33b2f23c988) (cherry picked from commit 4e89a4180e51f0c36c6938df858a424f6362cb3b)
This commit is contained in:
parent
93e1514933
commit
c26ff678b9
@ -1034,7 +1034,7 @@ static void run_context_check_done(RunContext *c) {
|
||||
else
|
||||
done = true;
|
||||
|
||||
if (c->forward && done) /* If the service is gone, it's time to drain the output */
|
||||
if (c->forward && !pty_forward_is_done(c->forward) && done) /* If the service is gone, it's time to drain the output */
|
||||
done = pty_forward_drain(c->forward);
|
||||
|
||||
if (done)
|
||||
@ -1106,9 +1106,14 @@ static int pty_forward_handler(PTYForward *f, int rcode, void *userdata) {
|
||||
|
||||
assert(f);
|
||||
|
||||
if (rcode == -ECANCELED)
|
||||
if (rcode == -ECANCELED) {
|
||||
log_debug_errno(rcode, "PTY forwarder disconnected.");
|
||||
else if (rcode < 0) {
|
||||
if (!arg_wait)
|
||||
return sd_event_exit(c->event, EXIT_SUCCESS);
|
||||
|
||||
/* If --wait is specified, we'll only exit the pty forwarding, but will continue to wait
|
||||
* for the service to end. If the user hits ^C we'll exit too. */
|
||||
} else if (rcode < 0) {
|
||||
sd_event_exit(c->event, EXIT_FAILURE);
|
||||
return log_error_errno(rcode, "Error on PTY forwarding logic: %m");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user