slave: restore pts file status flags after emitting user-notifications

We (need to) set O_NONBLOCK on the pts file description before
emitting the user-notifications, to ensure we don't block in write(3).

However, since file status flags are per *file*, not per
file *descriptor*, this ends up setting O_NONBLOCK on the dup:ed
stdin/stdout/stderr file descriptors too.

Not all clients want this, or can handle this.

Thus we need to restore the original flags before exec:ing the client.

This fixes "makepkg" build failures.
This commit is contained in:
Daniel Eklöf 2020-07-31 18:13:00 +02:00
parent a7d21c5c7f
commit 1da8142f32
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

View file

@ -202,10 +202,12 @@ slave_exec(int ptmx, char *argv[], int err_fd, bool login_shell,
goto err;
if (fcntl(pts, F_SETFL, flags | O_NONBLOCK) < 0)
goto err;
}
if (!emit_notifications(pts, notifications))
goto err;
if (!emit_notifications(pts, notifications))
goto err;
fcntl(pts, F_SETFL, flags);
}
close(pts);
pts = -1;