mirror of
https://github.com/hexedtech/codemp.git
synced 2024-11-22 23:34:49 +01:00
fix: better try_recv mutex logic for cursor ctrl
This commit is contained in:
parent
2a016a6619
commit
ab9c6530cd
1 changed files with 10 additions and 8 deletions
|
@ -67,8 +67,9 @@ impl Controller<Cursor> for CursorController {
|
||||||
|
|
||||||
/// try to receive without blocking, but will still block on stream mutex
|
/// try to receive without blocking, but will still block on stream mutex
|
||||||
fn try_recv(&self) -> crate::Result<Option<Cursor>> {
|
fn try_recv(&self) -> crate::Result<Option<Cursor>> {
|
||||||
let mut stream = self.0.stream.blocking_lock();
|
match self.0.stream.try_lock() {
|
||||||
match stream.try_recv() {
|
Err(_) => Ok(None),
|
||||||
|
Ok(mut stream) => match stream.try_recv() {
|
||||||
Ok(x) => Ok(Some(x.into())),
|
Ok(x) => Ok(Some(x.into())),
|
||||||
Err(TryRecvError::Empty) => Ok(None),
|
Err(TryRecvError::Empty) => Ok(None),
|
||||||
Err(TryRecvError::Closed) => Err(crate::Error::Channel { send: false }),
|
Err(TryRecvError::Closed) => Err(crate::Error::Channel { send: false }),
|
||||||
|
@ -78,6 +79,7 @@ impl Controller<Cursor> for CursorController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TODO is this cancelable? so it can be used in tokio::select!
|
// TODO is this cancelable? so it can be used in tokio::select!
|
||||||
// TODO is the result type overkill? should be an option?
|
// TODO is the result type overkill? should be an option?
|
||||||
|
|
Loading…
Reference in a new issue