use the more idiomatic channel for example ctrlc

This commit is contained in:
Andy Gayton 2024-06-24 11:36:42 -04:00
parent 0a2197ea2d
commit 9c6698cc8d

View File

@ -1,4 +1,4 @@
use std::sync::{Arc, Barrier};
use std::sync::mpsc;
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
use nu_protocol::{Category, LabeledError, PipelineData, Signature};
@ -34,17 +34,13 @@ impl PluginCommand for Ctrlc {
_call: &EvaluatedCall,
_input: PipelineData,
) -> Result<PipelineData, LabeledError> {
let barrier = Arc::new(Barrier::new(2));
let _guard = engine.register_ctrlc_handler(Box::new({
let barrier = barrier.clone();
move || {
barrier.wait();
}
let (sender, receiver) = mpsc::channel::<()>();
let _guard = engine.register_ctrlc_handler(Box::new(move || {
let _ = sender.send(());
}));
eprintln!("waiting for ctrl-c signal...");
barrier.wait();
receiver.recv().expect("handler went away");
eprintln!("peace.");
Ok(PipelineData::Empty)