@@ -657,6 +657,7 @@ pub struct Editor {
657657 // https://stackoverflow.com/a/66875668
658658 pub saves: HashMap<DocumentId, UnboundedSender<Once<DocumentSavedEventFuture>>>,
659659 pub save_queue: SelectAll<Flatten<UnboundedReceiverStream<Once<DocumentSavedEventFuture>>>>,
660+ pub write_count: usize,
660661
661662 pub count: Option<std::num::NonZeroUsize>,
662663 pub selected_register: Option<char>,
@@ -761,6 +762,7 @@ impl Editor {
761762 documents: BTreeMap::new(),
762763 saves: HashMap::new(),
763764 save_queue: SelectAll::new(),
765+ write_count: 0,
764766 count: None,
765767 selected_register: None,
766768 macro_recording: None,
@@ -1206,6 +1208,8 @@ impl Editor {
12061208 .send(stream::once(Box::pin(future)))
12071209 .map_err(|err| anyhow!("failed to send save event: {}", err))?;
12081210
1211+ self.write_count += 1;
1212+
12091213 Ok(())
12101214 }
12111215
@@ -1332,6 +1336,7 @@ impl Editor {
13321336 biased;
13331337
13341338 Some(event) = self.save_queue.next() => {
1339+ self.write_count -= 1;
13351340 EditorEvent::DocumentSaved(event)
13361341 }
13371342 Some(config_event) = self.config_events.1.recv() => {
@@ -1350,17 +1355,21 @@ impl Editor {
13501355 }
13511356
13521357 pub async fn flush_writes(&mut self) {
1353− while let Some(save_event) = self.save_queue.next().await {
1354− match &save_event {
1355− Ok(event) => {
1356− let doc = doc_mut!(self, &event.doc_id);
1357− doc.set_last_saved_revision(event.revision);
1358− }
1359− Err(err) => {
1360− log::error!("error saving document: {}", err);
1361− }
1362− };
1363− // TODO: if is_err: break?
1358+ while self.write_count > 0 {
1359+ if let Some(save_event) = self.save_queue.next().await {
1360+ match &save_event {
1361+ Ok(event) => {
1362+ let doc = doc_mut!(self, &event.doc_id);
1363+ doc.set_last_saved_revision(event.revision);
1364+ }
1365+ Err(err) => {
1366+ log::error!("error saving document: {}", err);
1367+ }
1368+ };
1369+ // TODO: if is_err: break?
1370+
1371+ self.write_count -= 1;
1372+ }
13641373 }
13651374 }
13661375}