Skip to content

Commit

Permalink
Remove unnecessary fcntl call when we know O_NONBLOCK is already correct
Browse files Browse the repository at this point in the history
  • Loading branch information
purplesyringa committed Jan 3, 2024
1 parent b52e205 commit 6b950bd
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
5 changes: 1 addition & 4 deletions src/platform/unix/ipc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
//! # std::io::Result::Ok(())
//! ```
use crate::{entry, Deserializer, Object, Serializer};
use crate::{Deserializer, Object, Serializer};
use nix::libc::{AF_UNIX, SOCK_CLOEXEC, SOCK_SEQPACKET};
use std::io::{Error, ErrorKind, IoSlice, IoSliceMut, Result};
use std::marker::PhantomData;
Expand Down Expand Up @@ -216,7 +216,6 @@ impl<T: Object> IntoRawFd for Sender<T> {

impl<T: Object> FromRawFd for Sender<T> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_unix_stream(UnixStream::from_raw_fd(fd))
}
}
Expand Down Expand Up @@ -251,7 +250,6 @@ impl<T: Object> IntoRawFd for Receiver<T> {

impl<T: Object> FromRawFd for Receiver<T> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_unix_stream(UnixStream::from_raw_fd(fd))
}
}
Expand Down Expand Up @@ -312,7 +310,6 @@ impl<S: Object, R: Object> IntoRawFd for Duplex<S, R> {

impl<S: Object, R: Object> FromRawFd for Duplex<S, R> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_unix_stream(UnixStream::from_raw_fd(fd))
}
}
39 changes: 30 additions & 9 deletions src/platform/unix/tokio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,12 +222,20 @@ impl<T: Object> Sender<T> {

impl<T: Object> From<crate::Sender<T>> for Sender<T> {
fn from(value: crate::Sender<T>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}
impl<T: Object> From<Sender<T>> for crate::Sender<T> {
fn from(value: Sender<T>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}

Expand All @@ -245,7 +253,6 @@ impl<T: Object> IntoRawFd for Sender<T> {

impl<T: Object> FromRawFd for Sender<T> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_unix_seqpacket(
UnixSeqpacket::from_raw_fd(fd)
.expect("Failed to register fd in tokio in crossmist::tokio::Sender::from_raw_fd"),
Expand All @@ -271,12 +278,20 @@ impl<T: Object> Receiver<T> {

impl<T: Object> From<crate::Receiver<T>> for Receiver<T> {
fn from(value: crate::Receiver<T>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}
impl<T: Object> From<Receiver<T>> for crate::Receiver<T> {
fn from(value: Receiver<T>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}

Expand All @@ -294,7 +309,6 @@ impl<T: Object> IntoRawFd for Receiver<T> {

impl<T: Object> FromRawFd for Receiver<T> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_unix_seqpacket(
UnixSeqpacket::from_raw_fd(fd).expect(
"Failed to register fd in tokio in crossmist::tokio::Receiver::from_raw_fd",
Expand Down Expand Up @@ -343,12 +357,20 @@ impl<S: Object, R: Object> Duplex<S, R> {

impl<S: Object, R: Object> From<crate::Duplex<S, R>> for Duplex<S, R> {
fn from(value: crate::Duplex<S, R>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}
impl<S: Object, R: Object> From<Duplex<S, R>> for crate::Duplex<S, R> {
fn from(value: Duplex<S, R>) -> Self {
unsafe { Self::from_raw_fd(value.into_raw_fd()) }
unsafe {
let fd = value.into_raw_fd();
entry::disable_nonblock(fd).expect("Failed to reset O_NONBLOCK");
Self::from_raw_fd(fd)
}
}
}

Expand All @@ -366,7 +388,6 @@ impl<S: Object, R: Object> IntoRawFd for Duplex<S, R> {

impl<S: Object, R: Object> FromRawFd for Duplex<S, R> {
unsafe fn from_raw_fd(fd: RawFd) -> Self {
entry::enable_nonblock(fd).expect("Failed to set O_NONBLOCK");
Self::from_unix_seqpacket(
UnixSeqpacket::from_raw_fd(fd)
.expect("Failed to register fd in tokio in crossmist::tokio::Duplex::from_raw_fd"),
Expand Down

0 comments on commit 6b950bd

Please sign in to comment.