Skip to content

Commit 7f30f9a

Browse files
committed
remove syscall_u32 and add doc comment for syscall macro and MaybeFd
1 parent b74aec2 commit 7f30f9a

18 files changed

+65
-112
lines changed

monoio/src/driver/op.rs

+6
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ pub(crate) struct CompletionMeta {
6363
pub(crate) flags: u32,
6464
}
6565

66+
/// MaybeFd is a wrapper for fd or a normal number. If it is marked as fd, it will close the fd when
67+
/// dropped.
68+
/// Use `into_inner` to take the inner fd or number and skip the drop.
69+
///
70+
/// This wrapper is designed to be used in the syscall return value. It can prevent fd leak when the
71+
/// operation is cancelled.
6672
#[derive(Debug)]
6773
pub(crate) struct MaybeFd {
6874
is_fd: bool,

monoio/src/driver/op/accept.rs

+6-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use std::{
99
use io_uring::{opcode, types};
1010
#[cfg(windows)]
1111
use {
12-
crate::syscall,
1312
std::os::windows::prelude::AsRawSocket,
1413
windows_sys::Win32::Networking::WinSock::{
1514
accept, socklen_t, INVALID_SOCKET, SOCKADDR_STORAGE,
@@ -19,8 +18,6 @@ use {
1918
use super::{super::shared_fd::SharedFd, Op, OpAble};
2019
#[cfg(any(feature = "legacy", feature = "poll-io"))]
2120
use super::{driver::ready::Direction, MaybeFd};
22-
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
23-
use crate::syscall_u32;
2421

2522
/// Accept
2623
pub(crate) struct Accept {
@@ -79,7 +76,7 @@ impl OpAble for Accept {
7976
let addr = self.addr.0.as_mut_ptr() as *mut _;
8077
let len = &mut self.addr.1;
8178

82-
syscall!(accept@FD(fd as _, addr, len), PartialEq::eq, INVALID_SOCKET)
79+
crate::syscall!(accept@FD(fd as _, addr, len), PartialEq::eq, INVALID_SOCKET)
8380
}
8481

8582
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
@@ -107,7 +104,7 @@ impl OpAble for Accept {
107104
))]
108105
return {
109106
let flag = libc::SOCK_CLOEXEC | libc::SOCK_NONBLOCK;
110-
syscall_u32!(accept4@FD(fd, addr, len, flag))
107+
crate::syscall!(accept4@FD(fd, addr, len, flag))
111108
};
112109

113110
// But not all platforms have the `accept4(2)` call. Luckily BSD (derived)
@@ -120,10 +117,10 @@ impl OpAble for Accept {
120117
target_os = "redox"
121118
))]
122119
return {
123-
let stream_fd = syscall_u32!(accept@FD(fd, addr, len))?;
124-
let fd = stream_fd.fd() as i32;
125-
syscall_u32!(fcntl@RAW(fd, libc::F_SETFD, libc::FD_CLOEXEC))?;
126-
syscall_u32!(fcntl@RAW(fd, libc::F_SETFL, libc::O_NONBLOCK))?;
120+
let stream_fd = crate::syscall!(accept@FD(fd, addr, len))?;
121+
let fd = stream_fd.fd() as libc::c_int;
122+
crate::syscall!(fcntl@RAW(fd, libc::F_SETFD, libc::FD_CLOEXEC))?;
123+
crate::syscall!(fcntl@RAW(fd, libc::F_SETFL, libc::O_NONBLOCK))?;
127124
Ok(stream_fd)
128125
};
129126
}

monoio/src/driver/op/close.rs

+3-6
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@ use std::os::unix::io::RawFd;
55
#[cfg(all(target_os = "linux", feature = "iouring"))]
66
use io_uring::{opcode, types};
77
#[cfg(windows)]
8-
use {
9-
crate::syscall, std::os::windows::io::RawSocket,
10-
windows_sys::Win32::Networking::WinSock::closesocket,
11-
};
8+
use {std::os::windows::io::RawSocket, windows_sys::Win32::Networking::WinSock::closesocket};
129

1310
#[cfg(any(feature = "legacy", feature = "poll-io"))]
1411
use super::MaybeFd;
@@ -52,9 +49,9 @@ impl OpAble for Close {
5249
#[cfg(any(feature = "legacy", feature = "poll-io"))]
5350
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
5451
#[cfg(unix)]
55-
return crate::syscall_u32!(close@NON_FD(self.fd));
52+
return crate::syscall!(close@NON_FD(self.fd));
5653

5754
#[cfg(windows)]
58-
return syscall!(closesocket@NON_FD(self.fd as _), PartialEq::ne, 0);
55+
return crate::syscall!(closesocket@NON_FD(self.fd as _), PartialEq::ne, 0);
5956
}
6057
}

monoio/src/driver/op/connect.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ impl OpAble for Connect {
7070
endpoints.sae_dstaddr = self.socket_addr.as_ptr();
7171
endpoints.sae_dstaddrlen = self.socket_addr_len;
7272

73-
return match crate::syscall_u32!(connectx@RAW(
73+
return match crate::syscall!(connectx@RAW(
7474
self.fd.raw_fd(),
7575
&endpoints as *const _,
7676
libc::SAE_ASSOCID_ANY,
@@ -86,7 +86,7 @@ impl OpAble for Connect {
8686
}
8787

8888
#[cfg(unix)]
89-
match crate::syscall_u32!(connect@RAW(
89+
match crate::syscall!(connect@RAW(
9090
self.fd.raw_fd(),
9191
self.socket_addr.as_ptr(),
9292
self.socket_addr_len,
@@ -158,7 +158,7 @@ impl OpAble for ConnectUnix {
158158

159159
#[cfg(any(feature = "legacy", feature = "poll-io"))]
160160
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
161-
match crate::syscall_u32!(connect@RAW(
161+
match crate::syscall!(connect@RAW(
162162
self.fd.raw_fd(),
163163
&self.socket_addr.0 as *const _ as *const _,
164164
self.socket_addr.1

monoio/src/driver/op/fsync.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,13 @@ impl OpAble for Fsync {
6363

6464
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
6565
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
66-
use crate::syscall_u32;
67-
6866
#[cfg(target_os = "linux")]
6967
if self.data_sync {
70-
syscall_u32!(fdatasync@NON_FD(self.fd.raw_fd()))
68+
crate::syscall!(fdatasync@NON_FD(self.fd.raw_fd()))
7169
} else {
72-
syscall_u32!(fsync@NON_FD(self.fd.raw_fd()))
70+
crate::syscall!(fsync@NON_FD(self.fd.raw_fd()))
7371
}
7472
#[cfg(not(target_os = "linux"))]
75-
syscall_u32!(fsync@NON_FD(self.fd.raw_fd()))
73+
crate::syscall!(fsync@NON_FD(self.fd.raw_fd()))
7674
}
7775
}

monoio/src/driver/op/mkdir.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,7 @@ impl OpAble for MkDir {
3737

3838
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
3939
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
40-
use crate::syscall_u32;
41-
42-
syscall_u32!(mkdirat@NON_FD(
40+
crate::syscall!(mkdirat@NON_FD(
4341
libc::AT_FDCWD,
4442
self.path.as_ptr(),
4543
self.mode

monoio/src/driver/op/open.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ use io_uring::{opcode, types};
66
#[cfg(any(feature = "legacy", feature = "poll-io"))]
77
use super::{driver::ready::Direction, MaybeFd};
88
use super::{Op, OpAble};
9-
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
10-
use crate::syscall_u32;
119
use crate::{driver::util::cstr, fs::OpenOptions};
1210

1311
/// Open a file
@@ -69,7 +67,7 @@ impl OpAble for Open {
6967

7068
#[cfg(all(any(feature = "legacy", feature = "poll-io"), not(windows)))]
7169
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
72-
syscall_u32!(open@FD(
70+
crate::syscall!(open@FD(
7371
self.path.as_c_str().as_ptr(),
7472
self.flags,
7573
self.mode as libc::c_int

monoio/src/driver/op/poll.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ impl OpAble for PollAdd {
8585
},
8686
revents: 0,
8787
};
88-
let ret = crate::syscall_u32!(poll@RAW(&mut pollfd as *mut _, 1, 0))?;
88+
let ret = crate::syscall!(poll@RAW(&mut pollfd as *mut _, 1, 0))?;
8989
if ret == 0 {
9090
return Err(ErrorKind::WouldBlock.into());
9191
}

monoio/src/driver/op/read.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -313,24 +313,23 @@ pub(crate) mod impls {
313313
use libc::iovec;
314314

315315
use super::*;
316-
use crate::syscall_u32;
317316

318317
/// A wrapper for [`libc::read`]
319318
pub(crate) fn read(fd: i32, buf: *mut u8, len: usize) -> io::Result<MaybeFd> {
320-
syscall_u32!(read@NON_FD(fd, buf as _, len))
319+
crate::syscall!(read@NON_FD(fd, buf as _, len))
321320
}
322321

323322
/// A wrapper of [`libc::pread`]
324323
pub(crate) fn read_at(fd: i32, buf: *mut u8, len: usize, offset: u64) -> io::Result<MaybeFd> {
325324
let offset = libc::off_t::try_from(offset)
326325
.map_err(|_| io::Error::new(io::ErrorKind::Other, "offset too big"))?;
327326

328-
syscall_u32!(pread@NON_FD(fd, buf as _, len, offset))
327+
crate::syscall!(pread@NON_FD(fd, buf as _, len, offset))
329328
}
330329

331330
/// A wrapper of [`libc::readv`]
332331
pub(crate) fn read_vectored(fd: i32, buf_vec: *mut iovec, len: usize) -> io::Result<MaybeFd> {
333-
syscall_u32!(readv@NON_FD(fd, buf_vec as _, len as _))
332+
crate::syscall!(readv@NON_FD(fd, buf_vec as _, len as _))
334333
}
335334

336335
/// A wrapper of [`libc::preadv`]
@@ -343,7 +342,7 @@ pub(crate) mod impls {
343342
let offset = libc::off_t::try_from(offset)
344343
.map_err(|_| io::Error::new(io::ErrorKind::Other, "offset too big"))?;
345344

346-
syscall_u32!(preadv@NON_FD(fd, buf_vec as _, len as _, offset))
345+
crate::syscall!(preadv@NON_FD(fd, buf_vec as _, len as _, offset))
347346
}
348347
}
349348

monoio/src/driver/op/recv.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
2+
use std::os::unix::prelude::AsRawFd;
13
use std::{
24
io,
35
mem::{transmute, MaybeUninit},
@@ -11,8 +13,6 @@ use {
1113
crate::net::unix::SocketAddr as UnixSocketAddr,
1214
libc::{sockaddr_in, sockaddr_in6, sockaddr_storage, socklen_t, AF_INET, AF_INET6},
1315
};
14-
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
15-
use {crate::syscall_u32, std::os::unix::prelude::AsRawFd};
1616
#[cfg(all(windows, any(feature = "legacy", feature = "poll-io")))]
1717
use {
1818
std::os::windows::io::AsRawSocket,
@@ -98,7 +98,7 @@ impl<T: IoBufMut> OpAble for Recv<T> {
9898
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
9999
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
100100
let fd = self.fd.as_raw_fd();
101-
syscall_u32!(recv@NON_FD(
101+
crate::syscall!(recv@NON_FD(
102102
fd,
103103
self.buf.write_ptr() as _,
104104
self.buf.bytes_total().min(u32::MAX as usize),
@@ -237,7 +237,7 @@ impl<T: IoBufMut> OpAble for RecvMsg<T> {
237237
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
238238
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
239239
let fd = self.fd.as_raw_fd();
240-
syscall_u32!(recvmsg@NON_FD(fd, &mut *self.info.2, 0))
240+
crate::syscall!(recvmsg@NON_FD(fd, &mut *self.info.2, 0))
241241
}
242242

243243
#[cfg(all(any(feature = "legacy", feature = "poll-io"), windows))]
@@ -355,6 +355,6 @@ impl<T: IoBufMut> OpAble for RecvMsgUnix<T> {
355355
#[cfg(any(feature = "legacy", feature = "poll-io"))]
356356
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
357357
let fd = self.fd.as_raw_fd();
358-
syscall_u32!(recvmsg@NON_FD(fd, &mut self.info.2 as *mut _, 0))
358+
crate::syscall!(recvmsg@NON_FD(fd, &mut self.info.2 as *mut _, 0))
359359
}
360360
}

monoio/src/driver/op/rename.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ impl OpAble for Rename {
4040

4141
#[cfg(all(any(feature = "legacy", feature = "poll-io"), unix))]
4242
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
43-
use crate::syscall_u32;
44-
45-
syscall_u32!(renameat@NON_FD(
43+
crate::syscall!(renameat@NON_FD(
4644
libc::AT_FDCWD,
4745
self.from.as_ptr(),
4846
libc::AT_FDCWD,

monoio/src/driver/op/send.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1+
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
2+
use std::os::unix::prelude::AsRawFd;
13
use std::{io, net::SocketAddr};
24

35
#[cfg(all(target_os = "linux", feature = "iouring"))]
46
use io_uring::{opcode, types};
57
use socket2::SockAddr;
68
#[cfg(all(windows, any(feature = "legacy", feature = "poll-io")))]
79
use {
8-
crate::syscall,
910
std::os::windows::io::AsRawSocket,
1011
windows_sys::Win32::Networking::WinSock::{send, WSASendMsg, SOCKET_ERROR},
1112
};
12-
#[cfg(all(unix, any(feature = "legacy", feature = "poll-io")))]
13-
use {crate::syscall_u32, std::os::unix::prelude::AsRawFd};
1413

1514
use super::{super::shared_fd::SharedFd, Op, OpAble};
1615
#[cfg(any(feature = "legacy", feature = "poll-io"))]
@@ -104,7 +103,7 @@ impl<T: IoBuf> OpAble for Send<T> {
104103
#[cfg(not(target_os = "linux"))]
105104
let flags = 0;
106105

107-
syscall_u32!(send@NON_FD(
106+
crate::syscall!(send@NON_FD(
108107
fd,
109108
self.buf.read_ptr() as _,
110109
self.buf.bytes_init(),
@@ -115,7 +114,7 @@ impl<T: IoBuf> OpAble for Send<T> {
115114
#[cfg(all(any(feature = "legacy", feature = "poll-io"), windows))]
116115
fn legacy_call(&mut self) -> io::Result<MaybeFd> {
117116
let fd = self.fd.as_raw_socket();
118-
syscall!(
117+
crate::syscall!(
119118
send@NON_FD(fd as _, self.buf.read_ptr(), self.buf.bytes_init() as _, 0),
120119
PartialOrd::lt,
121120
0
@@ -215,7 +214,7 @@ impl<T: IoBuf> OpAble for SendMsg<T> {
215214
#[cfg(not(target_os = "linux"))]
216215
const FLAGS: libc::c_int = 0;
217216
let fd = self.fd.as_raw_fd();
218-
syscall_u32!(sendmsg@NON_FD(fd, &*self.info.2, FLAGS))
217+
crate::syscall!(sendmsg@NON_FD(fd, &*self.info.2, FLAGS))
219218
}
220219

221220
#[cfg(all(any(feature = "legacy", feature = "poll-io"), windows))]
@@ -319,6 +318,6 @@ impl<T: IoBuf> OpAble for SendMsgUnix<T> {
319318
#[cfg(not(target_os = "linux"))]
320319
const FLAGS: libc::c_int = 0;
321320
let fd = self.fd.as_raw_fd();
322-
syscall_u32!(sendmsg@NON_FD(fd, &mut self.info.2 as *mut _, FLAGS))
321+
crate::syscall!(sendmsg@NON_FD(fd, &mut self.info.2 as *mut _, FLAGS))
323322
}
324323
}

monoio/src/driver/op/splice.rs

+2-5
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ use std::io;
66
use io_uring::{opcode, types};
77
#[cfg(all(unix, feature = "legacy"))]
88
use {
9-
crate::{
10-
driver::{op::MaybeFd, ready::Direction},
11-
syscall_u32,
12-
},
9+
crate::driver::{op::MaybeFd, ready::Direction},
1310
std::os::unix::prelude::AsRawFd,
1411
};
1512

@@ -97,7 +94,7 @@ impl OpAble for Splice {
9794
let fd_out = self.fd_out.as_raw_fd();
9895
let off_in = std::ptr::null_mut::<libc::loff_t>();
9996
let off_out = std::ptr::null_mut::<libc::loff_t>();
100-
syscall_u32!(splice@NON_FD(
97+
crate::syscall!(splice@NON_FD(
10198
fd_in,
10299
off_in,
103100
fd_out,

monoio/src/driver/op/statx.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl OpAble for FdStatx {
8686
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
8787
use std::os::fd::AsRawFd;
8888

89-
crate::syscall_u32!(statx@NON_FD(
89+
crate::syscall!(statx@NON_FD(
9090
self.inner.as_raw_fd(),
9191
c"".as_ptr(),
9292
libc::AT_EMPTY_PATH,
@@ -104,7 +104,7 @@ impl OpAble for FdStatx {
104104
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
105105
use std::os::fd::AsRawFd;
106106

107-
crate::syscall_u32!(fstat@NON_FD(
107+
crate::syscall!(fstat@NON_FD(
108108
self.inner.as_raw_fd(),
109109
self.stat_buf.as_mut_ptr() as *mut _
110110
))
@@ -173,7 +173,7 @@ impl OpAble for PathStatx {
173173

174174
#[cfg(all(any(feature = "legacy", feature = "poll-io"), target_os = "linux"))]
175175
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
176-
crate::syscall_u32!(statx@NON_FD(
176+
crate::syscall!(statx@NON_FD(
177177
libc::AT_FDCWD,
178178
self.inner.as_ptr(),
179179
self.flags,
@@ -190,12 +190,12 @@ impl OpAble for PathStatx {
190190
#[cfg(all(any(feature = "legacy", feature = "poll-io"), target_os = "macos"))]
191191
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
192192
if self.follow_symlinks {
193-
crate::syscall_u32!(stat@NON_FD(
193+
crate::syscall!(stat@NON_FD(
194194
self.inner.as_ptr(),
195195
self.stat_buf.as_mut_ptr() as *mut _
196196
))
197197
} else {
198-
crate::syscall_u32!(lstat@NON_FD(
198+
crate::syscall!(lstat@NON_FD(
199199
self.inner.as_ptr(),
200200
self.stat_buf.as_mut_ptr() as *mut _
201201
))

monoio/src/driver/op/symlink.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl OpAble for Symlink {
3636

3737
#[cfg(any(feature = "legacy", feature = "poll-io"))]
3838
fn legacy_call(&mut self) -> std::io::Result<MaybeFd> {
39-
crate::syscall_u32!(symlink@NON_FD(
39+
crate::syscall!(symlink@NON_FD(
4040
self.from.as_c_str().as_ptr(),
4141
self.to.as_c_str().as_ptr()
4242
))

0 commit comments

Comments
 (0)