Fixed a bug where buffer saved clocks would desynchronize in rare execution paths

co-authored-by: Max <max@zed.dev>
This commit is contained in:
Mikayla Maki 2023-06-07 16:10:23 -07:00
parent cd63ec2c7f
commit 2c5e83bf72
No known key found for this signature in database
4 changed files with 21 additions and 20 deletions

View file

@ -628,12 +628,13 @@ async fn apply_client_operation(
ensure_project_shared(&project, client, cx).await;
let requested_version = buffer.read_with(cx, |buffer, _| buffer.version());
let save = project.update(cx, |project, cx| project.save_buffer(buffer, cx));
let save = cx.background().spawn(async move {
let (saved_version, _, _) = save
.await
let save = project.update(cx, |project, cx| project.save_buffer(buffer.clone(), cx));
let save = cx.spawn(|cx| async move {
save.await
.map_err(|err| anyhow!("save request failed: {:?}", err))?;
assert!(saved_version.observed_all(&requested_version));
assert!(buffer
.read_with(&cx, |buffer, _| { buffer.saved_version().to_owned() })
.observed_all(&requested_version));
anyhow::Ok(())
});
if detach {