Skip to content

Commit f39a24b

Browse files
committed
refactor: code style
1 parent 4d91e96 commit f39a24b

File tree

2 files changed

+46
-78
lines changed

2 files changed

+46
-78
lines changed

src/driver/mio/mod.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -170,30 +170,27 @@ impl Driver {
170170
/// cqueue.
171171
fn poll_impl(&mut self, timeout: Option<Duration>) -> io::Result<()> {
172172
self.poll.poll(&mut self.events, timeout)?;
173-
// println!("events: {:?}", self.events);
174173
for event in &self.events {
175174
let token = event.token();
176175
let entry = self
177176
.waiting
178177
.get_mut(&token.0)
179178
.expect("Unknown token returned by mio"); // XXX: Should this be silently ignored?
180179
match entry.op_mut().on_event(event) {
181-
Ok(ControlFlow::Continue(_)) => {}
180+
Ok(ControlFlow::Continue(_)) => {
181+
continue;
182+
}
182183
Ok(ControlFlow::Break(res)) => {
183184
self.cqueue.push_back(Entry::new(entry.user_data, Ok(res)));
184-
self.poll
185-
.registry()
186-
.deregister(&mut SourceFd(&entry.arg.fd))?;
187-
self.waiting.remove(&token.0);
188185
}
189186
Err(err) => {
190187
self.cqueue.push_back(Entry::new(entry.user_data, Err(err)));
191-
self.poll
192-
.registry()
193-
.deregister(&mut SourceFd(&entry.arg.fd))?;
194-
self.waiting.remove(&token.0);
195188
}
196189
}
190+
self.poll
191+
.registry()
192+
.deregister(&mut SourceFd(&entry.arg.fd))?;
193+
self.waiting.remove(&token.0);
197194
}
198195
Ok(())
199196
}

src/driver/mio/op.rs

Lines changed: 39 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
op::*,
1010
};
1111

12-
/// Helper macro to execute a system call that returns an `io::Result`.
12+
/// Helper macro to execute a system call
1313
macro_rules! syscall {
1414
($fn: ident ( $($arg: expr),* $(,)* ) ) => {{
1515
#[allow(unused_unsafe)]
@@ -20,43 +20,26 @@ macro_rules! syscall {
2020
Ok(res as usize)
2121
}
2222
}};
23-
}
24-
25-
/// Helper macro to execute a system call that returns an `io::Result`.
26-
macro_rules! syscall_break {
27-
($fn: ident ( $($arg: expr),* $(,)* ) ) => {{
28-
#[allow(unused_unsafe)]
29-
let res = unsafe { ::libc::$fn($($arg, )*) };
30-
if res == -1 {
31-
Err(::std::io::Error::last_os_error())
32-
} else {
33-
Ok(ControlFlow::Break(res as _))
34-
}
35-
}};
36-
}
37-
38-
/// Execute a system call, if would block, wait for it to be readable.
39-
macro_rules! syscall_or_wait_writable {
40-
($fn: ident ( $($arg: expr),* $(,)* ), $fd:expr) => {{
23+
(break $fn: ident ( $($arg: expr),* $(,)* )) => {
24+
syscall!( $fn ( $($arg, )* )).map(ControlFlow::Break)
25+
};
26+
($fn: ident ( $($arg: expr),* $(,)* ) or wait_writable($fd:expr)) => {
4127
match syscall!( $fn ( $($arg, )* )) {
4228
Ok(fd) => Ok(Decision::Completed(fd)),
43-
Err(e) if e.kind() == io::ErrorKind::WouldBlock || e.raw_os_error().map_or(false, |code| code == libc::EINPROGRESS)
29+
Err(e) if e.kind() == io::ErrorKind::WouldBlock || e.raw_os_error() == Some(libc::EINPROGRESS)
4430
=> Ok(Decision::wait_writable($fd)),
4531
Err(e) => Err(e),
4632
}
47-
}};
48-
}
49-
50-
/// Execute a system call, if would block, wait for it to be writable.
51-
macro_rules! syscall_or_wait_readable {
52-
($fn: ident ( $($arg: expr),* $(,)* ), $fd:expr) => {{
33+
};
34+
($fn: ident ( $($arg: expr),* $(,)* ) or wait_readable($fd:expr)) => {
5335
match syscall!( $fn ( $($arg, )* )) {
5436
Ok(fd) => Ok(Decision::Completed(fd)),
55-
Err(e) if e.kind() == io::ErrorKind::WouldBlock || e.raw_os_error().map_or(false, |code| code == libc::EINPROGRESS)
37+
Err(e) if e.kind() == io::ErrorKind::WouldBlock || e.raw_os_error() == Some(libc::EINPROGRESS)
5638
=> Ok(Decision::wait_readable($fd)),
5739
Err(e) => Err(e),
5840
}
59-
}};
41+
}
42+
6043
}
6144

6245
impl<T: IoBufMut> OpCode for ReadAt<T> {
@@ -69,12 +52,14 @@ impl<T: IoBufMut> OpCode for ReadAt<T> {
6952

7053
let slice = self.buffer.as_uninit_slice();
7154

72-
syscall_break!(pread(
73-
self.fd,
74-
slice.as_mut_ptr() as _,
75-
slice.len() as _,
76-
self.offset as _
77-
))
55+
syscall!(
56+
break pread(
57+
self.fd,
58+
slice.as_mut_ptr() as _,
59+
slice.len() as _,
60+
self.offset as _
61+
)
62+
)
7863
}
7964
}
8065

@@ -88,12 +73,14 @@ impl<T: IoBuf> OpCode for WriteAt<T> {
8873

8974
let slice = self.buffer.as_slice();
9075

91-
syscall_break!(pwrite(
92-
self.fd,
93-
slice.as_ptr() as _,
94-
slice.len() as _,
95-
self.offset as _
96-
))
76+
syscall!(
77+
break pwrite(
78+
self.fd,
79+
slice.as_ptr() as _,
80+
slice.len() as _,
81+
self.offset as _
82+
)
83+
)
9784
}
9885
}
9986

@@ -109,13 +96,12 @@ impl OpCode for Sync {
10996

11097
impl OpCode for Accept {
11198
fn pre_submit(&mut self) -> io::Result<Decision> {
112-
syscall_or_wait_readable!(
99+
syscall!(
113100
accept(
114101
self.fd,
115102
&mut self.buffer as *mut _ as *mut _,
116103
&mut self.addr_len
117-
),
118-
self.fd
104+
) or wait_readable(self.fd)
119105
)
120106
}
121107

@@ -128,23 +114,16 @@ impl OpCode for Accept {
128114
&mut self.addr_len
129115
)) {
130116
Ok(fd) => Ok(ControlFlow::Break(fd)),
131-
Err(e)
132-
if e.kind() == io::ErrorKind::WouldBlock
133-
|| e.raw_os_error()
134-
.map_or(false, |code| code == libc::EINPROGRESS) =>
135-
{
136-
Ok(ControlFlow::Continue(()))
137-
}
117+
Err(e) if e.raw_os_error() == Some(libc::EINPROGRESS) => Ok(ControlFlow::Continue(())),
138118
Err(e) => Err(e),
139119
}
140120
}
141121
}
142122

143123
impl OpCode for Connect {
144124
fn pre_submit(&mut self) -> io::Result<Decision> {
145-
syscall_or_wait_writable!(
146-
connect(self.fd, self.addr.as_ptr(), self.addr.len()),
147-
self.fd
125+
syscall!(
126+
connect(self.fd, self.addr.as_ptr(), self.addr.len()) or wait_writable(self.fd)
148127
)
149128
}
150129

@@ -179,11 +158,7 @@ impl<T: AsIoSlicesMut> OpCode for RecvImpl<T> {
179158
debug_assert!(event.is_readable());
180159

181160
self.slices = unsafe { self.buffer.as_io_slices_mut() };
182-
syscall_break!(readv(
183-
self.fd,
184-
self.slices.as_ptr() as _,
185-
self.slices.len() as _,
186-
))
161+
syscall!(break readv(self.fd, self.slices.as_ptr() as _, self.slices.len() as _,))
187162
}
188163
}
189164

@@ -196,36 +171,32 @@ impl<T: AsIoSlices> OpCode for SendImpl<T> {
196171
debug_assert!(event.is_writable());
197172

198173
self.slices = unsafe { self.buffer.as_io_slices() };
199-
syscall_break!(writev(
200-
self.fd,
201-
self.slices.as_ptr() as _,
202-
self.slices.len() as _,
203-
))
174+
syscall!(break writev(self.fd, self.slices.as_ptr() as _, self.slices.len() as _,))
204175
}
205176
}
206177

207178
impl<T: AsIoSlicesMut> OpCode for RecvFromImpl<T> {
208179
fn pre_submit(&mut self) -> io::Result<Decision> {
209180
self.set_msg();
210-
syscall_or_wait_readable!(recvmsg(self.fd, &mut self.msg, 0), self.fd)
181+
syscall!(recvmsg(self.fd, &mut self.msg, 0) or wait_readable(self.fd))
211182
}
212183

213184
fn on_event(&mut self, event: &Event) -> std::io::Result<ControlFlow<usize>> {
214185
debug_assert!(event.is_readable());
215186

216-
syscall_break!(recvmsg(self.fd, &mut self.msg, 0))
187+
syscall!(break recvmsg(self.fd, &mut self.msg, 0))
217188
}
218189
}
219190

220191
impl<T: AsIoSlices> OpCode for SendToImpl<T> {
221192
fn pre_submit(&mut self) -> io::Result<Decision> {
222193
self.set_msg();
223-
syscall_or_wait_writable!(sendmsg(self.fd, &self.msg, 0), self.fd)
194+
syscall!(sendmsg(self.fd, &self.msg, 0) or wait_writable(self.fd))
224195
}
225196

226197
fn on_event(&mut self, event: &Event) -> std::io::Result<ControlFlow<usize>> {
227-
assert!(event.is_writable());
198+
debug_assert!(event.is_writable());
228199

229-
syscall_break!(sendmsg(self.fd, &self.msg, 0))
200+
syscall!(break sendmsg(self.fd, &self.msg, 0))
230201
}
231202
}

0 commit comments

Comments
 (0)