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 none
pull/2267/head
Skyler Hawthorne 2 years ago
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…
Cancel
Save