about summary refs log tree commit diff
path: root/library/std/src/sys/wasi
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2021-04-25 23:15:17 +0200
committerGitHub <noreply@github.com>2021-04-25 23:15:17 +0200
commit25508ebe680dc5ff9a2aa0e6f4c47e9757edd1c9 (patch)
tree1734802f61b460cc2e0e341574dd37cfd71738e7 /library/std/src/sys/wasi
parent139749934b174cbe556d4e026a76461e9aa8d0b3 (diff)
parentfbc2aadbfc6a54da9d8cc5929287d2bcc55c545e (diff)
Rollup merge of #84541 - KaiJewson:inline-raw, r=m-ou-se
Inline most raw socket, fd and handle conversions

Now that file descriptor types on Unix have niches, it is advantageous for user libraries which provide file descriptor wrappers (e.g. `Socket` from socket2) to store a `File` internally instead of a `RawFd`, so that the niche can be taken advantage of. However, doing so will currently result in worse performance as `IntoRawFd`, `FromRawFd` and `AsRawFd` are not inlined. This change adds `#[inline]` to those methods on std types that wrap file descriptors, handles or sockets.
Diffstat (limited to 'library/std/src/sys/wasi')
-rw-r--r--library/std/src/sys/wasi/ext/io.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/library/std/src/sys/wasi/ext/io.rs b/library/std/src/sys/wasi/ext/io.rs
index 3c480aa8e19..b2e79cc1b4a 100644
--- a/library/std/src/sys/wasi/ext/io.rs
+++ b/library/std/src/sys/wasi/ext/io.rs
@@ -54,126 +54,147 @@ pub trait IntoRawFd {
 
 #[stable(feature = "raw_fd_reflexive_traits", since = "1.48.0")]
 impl AsRawFd for RawFd {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         *self
     }
 }
 #[stable(feature = "raw_fd_reflexive_traits", since = "1.48.0")]
 impl IntoRawFd for RawFd {
+    #[inline]
     fn into_raw_fd(self) -> RawFd {
         self
     }
 }
 #[stable(feature = "raw_fd_reflexive_traits", since = "1.48.0")]
 impl FromRawFd for RawFd {
+    #[inline]
     unsafe fn from_raw_fd(fd: RawFd) -> RawFd {
         fd
     }
 }
 
 impl AsRawFd for net::TcpStream {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         self.as_inner().fd().as_raw()
     }
 }
 
 impl FromRawFd for net::TcpStream {
+    #[inline]
     unsafe fn from_raw_fd(fd: RawFd) -> net::TcpStream {
         net::TcpStream::from_inner(sys::net::TcpStream::from_inner(fd))
     }
 }
 
 impl IntoRawFd for net::TcpStream {
+    #[inline]
     fn into_raw_fd(self) -> RawFd {
         self.into_inner().into_fd().into_raw()
     }
 }
 
 impl AsRawFd for net::TcpListener {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         self.as_inner().fd().as_raw()
     }
 }
 
 impl FromRawFd for net::TcpListener {
+    #[inline]
     unsafe fn from_raw_fd(fd: RawFd) -> net::TcpListener {
         net::TcpListener::from_inner(sys::net::TcpListener::from_inner(fd))
     }
 }
 
 impl IntoRawFd for net::TcpListener {
+    #[inline]
     fn into_raw_fd(self) -> RawFd {
         self.into_inner().into_fd().into_raw()
     }
 }
 
 impl AsRawFd for net::UdpSocket {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         self.as_inner().fd().as_raw()
     }
 }
 
 impl FromRawFd for net::UdpSocket {
+    #[inline]
     unsafe fn from_raw_fd(fd: RawFd) -> net::UdpSocket {
         net::UdpSocket::from_inner(sys::net::UdpSocket::from_inner(fd))
     }
 }
 
 impl IntoRawFd for net::UdpSocket {
+    #[inline]
     fn into_raw_fd(self) -> RawFd {
         self.into_inner().into_fd().into_raw()
     }
 }
 
 impl AsRawFd for fs::File {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         self.as_inner().fd().as_raw()
     }
 }
 
 impl FromRawFd for fs::File {
+    #[inline]
     unsafe fn from_raw_fd(fd: RawFd) -> fs::File {
         fs::File::from_inner(sys::fs::File::from_inner(fd))
     }
 }
 
 impl IntoRawFd for fs::File {
+    #[inline]
     fn into_raw_fd(self) -> RawFd {
         self.into_inner().into_fd().into_raw()
     }
 }
 
 impl AsRawFd for io::Stdin {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDIN_FILENO as RawFd
     }
 }
 
 impl AsRawFd for io::Stdout {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDOUT_FILENO as RawFd
     }
 }
 
 impl AsRawFd for io::Stderr {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDERR_FILENO as RawFd
     }
 }
 
 impl<'a> AsRawFd for io::StdinLock<'a> {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDIN_FILENO as RawFd
     }
 }
 
 impl<'a> AsRawFd for io::StdoutLock<'a> {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDOUT_FILENO as RawFd
     }
 }
 
 impl<'a> AsRawFd for io::StderrLock<'a> {
+    #[inline]
     fn as_raw_fd(&self) -> RawFd {
         libc::STDERR_FILENO as RawFd
     }