diff --git a/Makefile b/Makefile index a39b727de..ab602b173 100644 --- a/Makefile +++ b/Makefile @@ -23,11 +23,11 @@ ALL_TARGETS := $(EMBASSY_BINS) system-images/compat/docker-images/$(ARCH).tar sy ifeq ($(REMOTE),) mkdir = mkdir -p $1 - rm = rm -rf $@ + rm = rm -rf $1 cp = cp -r $1 $2 else mkdir = ssh $(REMOTE) 'mkdir -p $1' - rm = ssh $(REMOTE) 'rm -rf $@' + rm = ssh $(REMOTE) 'sudo rm -rf $1' define cp tar --transform "s|^$1|x|" -czv -f- $1 | ssh $(REMOTE) "sudo tar --transform 's|^x|$2|' -xzv -f- -C /" endef diff --git a/backend/src/bin/embassyd.rs b/backend/src/bin/embassyd.rs index aec0e122a..95134f308 100644 --- a/backend/src/bin/embassyd.rs +++ b/backend/src/bin/embassyd.rs @@ -90,6 +90,8 @@ async fn inner_main(cfg_path: Option) -> Result, Error server.shutdown().await; rpc_ctx.shutdown().await?; + tracing::info!("RPC Context is dropped"); + Ok(shutdown) } diff --git a/backend/src/context/rpc.rs b/backend/src/context/rpc.rs index 85c286314..420fc0bb5 100644 --- a/backend/src/context/rpc.rs +++ b/backend/src/context/rpc.rs @@ -265,6 +265,7 @@ impl RpcContext { self.managers.empty().await?; self.secret_store.close().await; self.is_closed.store(true, Ordering::SeqCst); + tracing::info!("RPC Context is shutdown"); // TODO: shutdown http servers Ok(()) } diff --git a/backend/src/net/net_controller.rs b/backend/src/net/net_controller.rs index 37faebdf7..65631e0b5 100644 --- a/backend/src/net/net_controller.rs +++ b/backend/src/net/net_controller.rs @@ -329,6 +329,7 @@ impl NetService { } std::mem::take(&mut self.dns); errors.handle(ctrl.dns.gc(Some(self.id.clone()), self.ip).await); + self.ip = Ipv4Addr::new(0, 0, 0, 0); errors.into_result() } else { Err(Error::new( @@ -341,17 +342,20 @@ impl NetService { impl Drop for NetService { fn drop(&mut self) { - let svc = std::mem::replace( - self, - NetService { - id: Default::default(), - ip: [0, 0, 0, 0].into(), - dns: Default::default(), - controller: Default::default(), - tor: Default::default(), - lan: Default::default(), - }, - ); - tokio::spawn(async move { svc.remove_all().await.unwrap() }); + if self.ip != Ipv4Addr::new(0, 0, 0, 0) { + tracing::debug!("Dropping NetService for {}", self.id); + let svc = std::mem::replace( + self, + NetService { + id: Default::default(), + ip: Ipv4Addr::new(0, 0, 0, 0), + dns: Default::default(), + controller: Default::default(), + tor: Default::default(), + lan: Default::default(), + }, + ); + tokio::spawn(async move { svc.remove_all().await.unwrap() }); + } } } diff --git a/backend/src/shutdown.rs b/backend/src/shutdown.rs index 7b984f0bb..4ee259222 100644 --- a/backend/src/shutdown.rs +++ b/backend/src/shutdown.rs @@ -21,6 +21,12 @@ impl Shutdown { pub fn execute(&self) { use std::process::Command; + if self.restart { + tracing::info!("Beginning server restart"); + } else { + tracing::info!("Beginning server shutdown"); + } + let rt = tokio::runtime::Builder::new_current_thread() .enable_all() .build() @@ -52,33 +58,32 @@ impl Shutdown { tracing::debug!("{:?}", e); } } - if self.restart { + if !*IS_RASPBERRY_PI || self.restart { if let Err(e) = SHUTDOWN.play().await { tracing::error!("Error Playing Shutdown Song: {}", e); tracing::debug!("{:?}", e); } - } else { - tokio::fs::write(STANDBY_MODE_PATH, "").await.unwrap(); - Command::new("sync") - .invoke(ErrorKind::Filesystem) - .await - .unwrap(); } }); drop(rt); if *IS_RASPBERRY_PI { if !self.restart { std::fs::write(STANDBY_MODE_PATH, "").unwrap(); + Command::new("sync").spawn().unwrap().wait().unwrap(); } Command::new("reboot").spawn().unwrap().wait().unwrap(); } else { - Command::new("shutdown") - .arg("-h") - .arg("now") - .spawn() - .unwrap() - .wait() - .unwrap(); + if self.restart { + Command::new("reboot").spawn().unwrap().wait().unwrap(); + } else { + Command::new("shutdown") + .arg("-h") + .arg("now") + .spawn() + .unwrap() + .wait() + .unwrap(); + } } } }