mirror of https://github.com/helix-editor/helix
fix erroneous write sender close
This was not distinguishing the error types when trying a receive on an empty receiver, which was erroneously causing the sender to be closed when trying to flush the writes when there were nonepull/2267/head
parent
d544376590
commit
7b11e9ac69
|
@ -13,6 +13,7 @@ use std::future::Future;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use tokio::sync::mpsc::error::TryRecvError;
|
||||||
use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
|
use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender};
|
||||||
|
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
@ -662,7 +663,16 @@ impl Document {
|
||||||
let save_req = if block {
|
let save_req = if block {
|
||||||
rx.recv().await
|
rx.recv().await
|
||||||
} else {
|
} else {
|
||||||
rx.try_recv().ok()
|
let msg = rx.try_recv();
|
||||||
|
|
||||||
|
if let Err(err) = msg {
|
||||||
|
match err {
|
||||||
|
TryRecvError::Empty => return None,
|
||||||
|
TryRecvError::Disconnected => None,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
msg.ok()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
let save = match save_req {
|
let save = match save_req {
|
||||||
|
|
Loading…
Reference in New Issue