remove extra spinning from mpsc::Receiver::recv
This commit is contained in:
parent
cb394c026a
commit
8c17a3e7cb
2 changed files with 6 additions and 26 deletions
|
@ -379,19 +379,9 @@ impl<T> Channel<T> {
|
||||||
pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
|
pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
|
||||||
let token = &mut Token::default();
|
let token = &mut Token::default();
|
||||||
loop {
|
loop {
|
||||||
// Try receiving a message several times.
|
if self.start_recv(token) {
|
||||||
let backoff = Backoff::new();
|
let res = unsafe { self.read(token) };
|
||||||
loop {
|
return res.map_err(|_| RecvTimeoutError::Disconnected);
|
||||||
if self.start_recv(token) {
|
|
||||||
let res = unsafe { self.read(token) };
|
|
||||||
return res.map_err(|_| RecvTimeoutError::Disconnected);
|
|
||||||
}
|
|
||||||
|
|
||||||
if backoff.is_completed() {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
backoff.snooze();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(d) = deadline {
|
if let Some(d) = deadline {
|
||||||
|
|
|
@ -418,19 +418,9 @@ impl<T> Channel<T> {
|
||||||
pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
|
pub(crate) fn recv(&self, deadline: Option<Instant>) -> Result<T, RecvTimeoutError> {
|
||||||
let token = &mut Token::default();
|
let token = &mut Token::default();
|
||||||
loop {
|
loop {
|
||||||
// Try receiving a message several times.
|
if self.start_recv(token) {
|
||||||
let backoff = Backoff::new();
|
unsafe {
|
||||||
loop {
|
return self.read(token).map_err(|_| RecvTimeoutError::Disconnected);
|
||||||
if self.start_recv(token) {
|
|
||||||
unsafe {
|
|
||||||
return self.read(token).map_err(|_| RecvTimeoutError::Disconnected);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if backoff.is_completed() {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
backoff.snooze();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue