From ca221497c5610f6377ca26b2a8d25438dbdc0a0a Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Mon, 25 Dec 2023 16:01:14 -0600 Subject: [PATCH] janky deser --- server/src/mine.rs | 11 ++++++++++- server/src/tasks.rs | 1 - server/src/turtle.rs | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/src/mine.rs b/server/src/mine.rs index 72aff8d..2aeaf96 100644 --- a/server/src/mine.rs +++ b/server/src/mine.rs @@ -251,8 +251,17 @@ impl Quarry { } async fn next_chunk(&self) -> i32 { + loop { // this might be unsound, I don't really know + let chunk = self.head.load(Ordering::SeqCst); + let backstop = self.confirmed.load(Ordering::SeqCst); + if let Ok(_) = self.head.compare_exchange(chunk, chunk.max(backstop), Ordering::AcqRel, Ordering::SeqCst) { + break; + } + } + let chunk = self.head.fetch_add(1, Ordering::AcqRel); - self.in_flight.write().await.push(chunk); + let backstop = self.confirmed.load(Ordering::SeqCst); + self.in_flight.write().await.push(chunk.max(backstop)); chunk } diff --git a/server/src/tasks.rs b/server/src/tasks.rs index 489b840..99376eb 100644 --- a/server/src/tasks.rs +++ b/server/src/tasks.rs @@ -58,7 +58,6 @@ impl Scheduler { self.tasks.push(task); } - #[instrument(skip(self))] pub async fn poll(&mut self) { for turtle in &mut self.turtles { if let Some(join) = &turtle.1 { diff --git a/server/src/turtle.rs b/server/src/turtle.rs index da354e0..5715b39 100644 --- a/server/src/turtle.rs +++ b/server/src/turtle.rs @@ -10,6 +10,7 @@ use anyhow::Ok; use anyhow; use anyhow::Context; +use tracing::error; use tracing::trace; use tracing::warn; use tracing::info; @@ -192,7 +193,10 @@ impl TurtleCommander { pub async fn execute(&self, command: TurtleCommand) -> TurtleInfo { let (send, recv) = oneshot::channel::(); - self.sender.to_owned().send((command,send)).await.unwrap(); + if let Err(_) = self.sender.to_owned().send((command,send)).await { + error!("server disappeared"); // It's fine to continue, nobody + // is left to read garbage + }; let resp = recv.await.unwrap(); let mut pos = self.pos.write().await;