1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-25 14:05:41 -05:00

Remove incorrect close (#552)

Ownership of the slave file descriptor is passed to the process::Stdio
structs and will be closed when they are dropped. If the slave fd is
closed explicitly then the next fd that is opened during the same scope
will get silently closed by the Stdio structs when they are dropped.
This commit is contained in:
Niklas Claesson 2017-05-28 04:52:58 +02:00 committed by Joe Wilm
parent f051e686da
commit e2be3c34b4

View file

@ -193,6 +193,9 @@ pub fn new<T: ToWinsize>(config: &Config, options: &Options, size: T) -> Pty {
} }
// Setup child stdin/stdout/stderr as slave fd of pty // Setup child stdin/stdout/stderr as slave fd of pty
// Ownership of fd is transferred to the Stdio structs and will be closed by them at the end of
// this scope. (It is not an issue that the fd is closed three times since File::drop ignores
// error on libc::close.)
builder.stdin(unsafe { Stdio::from_raw_fd(slave) }); builder.stdin(unsafe { Stdio::from_raw_fd(slave) });
builder.stderr(unsafe { Stdio::from_raw_fd(slave) }); builder.stderr(unsafe { Stdio::from_raw_fd(slave) });
builder.stdout(unsafe { Stdio::from_raw_fd(slave) }); builder.stdout(unsafe { Stdio::from_raw_fd(slave) });
@ -248,9 +251,6 @@ pub fn new<T: ToWinsize>(config: &Config, options: &Options, size: T) -> Pty {
// Handle SIGCHLD // Handle SIGCHLD
libc::signal(SIGCHLD, sigchld as _); libc::signal(SIGCHLD, sigchld as _);
// Parent doesn't need slave fd
libc::close(slave);
} }
unsafe { unsafe {
// Maybe this should be done outside of this function so nonblocking // Maybe this should be done outside of this function so nonblocking