@@ -23,9 +23,13 @@ static ONCE: Once = Once::new();
2323
2424lazy_static ! {
2525 /// Root Sender
26+ /// This is the sender to the main loop. It is lazily initialized inside a Mutex.
2627 static ref SENDER : Mutex <Option <Sender <Signal >>> = Mutex :: new( None ) ;
2728}
2829
30+ /// Signal enum.
31+ /// This enum is used to send signals to the main loop. It is used to add/remove global or thread
32+ /// tags and to exit the main loop.
2933#[ derive( Debug , Encode , Decode , PartialEq , Clone ) ]
3034pub enum Signal {
3135 Kill ,
@@ -52,7 +56,7 @@ pub fn initialize_ffi() -> Result<Receiver<Signal>> {
5256
5357 // Listen for signals on the main parent process.
5458 let fn_sender = merge_sender. clone ( ) ;
55- let channel_listener : JoinHandle < Result < ( ) > > = std:: thread:: spawn ( move || {
59+ let _channel_listener : JoinHandle < Result < ( ) > > = std:: thread:: spawn ( move || {
5660 log:: trace!( "Spawned FFI listener thread." ) ;
5761
5862 while let Ok ( signal) = receiver. recv ( ) {
@@ -81,7 +85,7 @@ pub fn initialize_ffi() -> Result<Receiver<Signal>> {
8185
8286 // Listen for signals on local socket
8387 let socket_sender = merge_sender. clone ( ) ;
84- let socket_listener : JoinHandle < Result < ( ) > > = std:: thread:: spawn ( move || {
88+ let _socket_listener : JoinHandle < Result < ( ) > > = std:: thread:: spawn ( move || {
8589 let socket_address = format ! ( "/tmp/PYROSCOPE-{}" , get_parent_pid( ) ) ;
8690
8791 log:: trace!(
@@ -158,7 +162,16 @@ pub fn send(signal: Signal) -> Result<()> {
158162 conn. flush ( ) ?;
159163 } else {
160164 // Send signal through parent process.
161- SENDER . lock ( ) ?. as_ref ( ) . unwrap ( ) . send ( signal) ?;
165+ if let Some ( sender) = & * SENDER . lock ( ) ? {
166+ log:: trace!(
167+ target: LOG_TAG ,
168+ "Sending signal {:?} through FFI channel" ,
169+ signal
170+ ) ;
171+ sender. send ( signal) ?;
172+ } else {
173+ log:: error!( target: LOG_TAG , "FFI channel not initialized" ) ;
174+ }
162175 }
163176
164177 Ok ( ( ) )
0 commit comments