diff --git a/src/lib.rs b/src/lib.rs index fbf0489..6b2e781 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -55,18 +55,26 @@ impl Tenquestionmarks { // Module event consumer threads. // tenquestionmarks propagates all events to each Module through these // channels. - let senders: Vec>> = self.modules.values().map(|module| { + let senders: BTreeMap<&str, Sender>> = self.modules.iter().map(|(key, module)| { let (sender, receiver) = mpsc::channel(); - scope.spawn(move || module.consume_events(receiver)); - sender + info!("Spawning consumer thread for \"{}\"", key); + scope.spawn(move || { + module.consume_events(receiver); + info!("Consumer thread for \"{}\" is exiting", key); + }); + (&key[..], sender) }).collect(); // Module event producer threads. // Each Module will produce events which tenquestionmarks will push // into all other Modules. - for module in self.modules.values() { + for (key, module) in self.modules.iter() { let module_sender = sender.clone(); - scope.spawn(move || module.produce_events(module_sender)); + info!("Spawning producer thread for \"{}\"", key); + scope.spawn(move || { + module.produce_events(module_sender); + info!("Producer thread for \"{}\" is exiting", key); + }); } // tenquestionmarks main event loop. @@ -75,9 +83,9 @@ impl Tenquestionmarks { loop { match receiver.recv() { Ok(event) => { - for sender in &senders { + for (key, sender) in &senders { match sender.send(event.clone()) { - Err(err) => debug!("Failed to dispatch event to module: {:?}", err), + Err(err) => debug!("Failed to dispatch event to module \"{}\": {:?}", key, err), Ok(_) => {} } }