os/unix/stream: stop into_raw_fd from closing the fd

`UnixStream::into_raw_fd` calls `as_raw_fd`, which doesn't take the
ownership of the file descriptor, so the file descriptor is closed when
`self` is dropped upon returning from the function.

Because `UnixStream` uses a `Arc` to support Clone, there could be an
arbitrary number of instances around. We cannot take ownership of the
descriptor from all of the instances. Therefore we have no choice but to
duplicate the file descriptor and return that.

Fixes #855

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
pull/856/head
Yuxuan Shui 4 years ago
parent 59874d639c
commit b0ac73cb57
No known key found for this signature in database
GPG Key ID: 37C999F617EA1A47

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://book.async.rs/overview
## [Unreleased]
## Fixed
- Ensure `UnixStream::into_raw_fd` doesn't close the file descriptor ([#855](https://github.com/async-rs/async-std/issues/855))
# [1.6.3] - 2020-07-31
## Added

@ -252,6 +252,6 @@ impl FromRawFd for UnixStream {
impl IntoRawFd for UnixStream {
fn into_raw_fd(self) -> RawFd {
self.as_raw_fd()
(*self.watcher).get_ref().try_clone().unwrap().into_raw_fd()
}
}

Loading…
Cancel
Save