]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
ptyfwd: reset writable/readable flag before shovel() on exit
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 19 Dec 2024 03:22:00 +0000 (12:22 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 19 Dec 2024 23:59:41 +0000 (08:59 +0900)
Follow-up for 12807b5a49d1fe60434d473afe11ff81a4c92306.

Otherwise, if a call of shovel() disabled the flags, the subsequent
calls do nothing even if there is something we need to read or write.

Fixes the following error:
```
Dec 19 02:19:39 run0[5618]: Error on PTY forwarding logic: Too many levels of symbolic links
```

src/shared/ptyfwd.c

index ea365300419172722a234ea810bb049a7cf50dcd..f0b45dd918d1b929be9d1de70ab7c97c4e8b8b41 100644 (file)
@@ -840,6 +840,13 @@ static int on_exit_event(sd_event_source *e, void *userdata) {
                 if (drained(f))
                         return pty_forward_done(f, 0);
 
+                if (!f->master_hangup)
+                        f->master_writable = f->master_readable = true;
+                if (!f->stdin_hangup)
+                        f->stdin_readable = true;
+                if (!f->stdout_hangup)
+                        f->stdout_writable = true;
+
                 r = shovel(f);
                 if (r < 0)
                         return r;