diff --git a/libsigner/src/runloop.rs b/libsigner/src/runloop.rs index 7f0a2a73d..2f4bbcf46 100644 --- a/libsigner/src/runloop.rs +++ b/libsigner/src/runloop.rs @@ -133,6 +133,12 @@ impl RunningSigner { // kill event receiver self.stop_signal.send(); + self.join() + } + + /// Wait for the signer to terminate, and get the final state. + /// WARNING: This will hang forever if the event receiver stop signal was never sent/no error occurs. + pub fn join(self) -> Option { debug!("Try join event loop..."); // wait for event receiver join let _ = self.event_join.join().map_err(|thread_panic| { diff --git a/stacks-signer/src/main.rs b/stacks-signer/src/main.rs index ef780fe16..a4c49acab 100644 --- a/stacks-signer/src/main.rs +++ b/stacks-signer/src/main.rs @@ -227,11 +227,10 @@ fn handle_dkg_sign(args: SignArgs) { fn handle_run(args: RunDkgArgs) { debug!("Running signer..."); - let _spawned_signer = spawn_running_signer(&args.config); + let spawned_signer = spawn_running_signer(&args.config); println!("Signer spawned successfully. Waiting for messages to process..."); - loop { - std::thread::sleep(Duration::from_secs(10)); - } + // Wait for the spawned signer to stop (will only occur if an error occurs) + let _ = spawned_signer.running_signer.join(); } fn handle_generate_files(args: GenerateFilesArgs) {