99pub  mod  error; 
1010pub  mod  zip; 
1111
12+ use  std:: sync:: atomic:: { AtomicBool ,  Ordering } ; 
13+ 
1214use  datadog_remote_config:: { 
1315    config:: agent_task:: AgentTaskFile ,  file_storage:: RawFile ,  RemoteConfigData , 
1416} ; 
@@ -53,7 +55,7 @@ use crate::error::FlareError;
5355pub  struct  TracerFlareManager  { 
5456    pub  agent_url :  String , 
5557    pub  language :  String , 
56-     pub  collecting :  bool , 
58+     pub  collecting :  AtomicBool , 
5759    /// As a featured option so we can use the component with no Listener 
5860     #[ cfg( feature = "listener" ) ]  
5961    pub  listener :  Option < Listener > , 
@@ -64,7 +66,7 @@ impl Default for TracerFlareManager {
6466        TracerFlareManager  { 
6567            agent_url :  hyper:: Uri :: default ( ) . to_string ( ) , 
6668            language :  "rust" . to_string ( ) , 
67-             collecting :  false , 
69+             collecting :  AtomicBool :: new ( false ) , 
6870            #[ cfg( feature = "listener" ) ]  
6971            listener :  None , 
7072        } 
@@ -176,18 +178,18 @@ impl TracerFlareManager {
176178     /// * `Ok(ReturnAction)` - If successful. 
177179     /// * `FlareError(msg)` - If something fails. 
178180     pub  fn  handle_remote_config_data ( 
179-         & mut   self , 
181+         & self , 
180182        data :  & RemoteConfigData , 
181183    )  -> Result < ReturnAction ,  FlareError >  { 
182184        let  action = data. try_into ( ) ; 
183185        if  let  Ok ( ReturnAction :: Set ( _) )  = action { 
184-             if  self . collecting  { 
186+             if  self . collecting . load ( Ordering :: Relaxed )  { 
185187                return  Ok ( ReturnAction :: None ) ; 
186188            } 
187-             self . collecting  =  true ; 
189+             self . collecting . store ( true ,   Ordering :: Relaxed ) ; 
188190        }  else  if  Ok ( ReturnAction :: None )  != action { 
189191            // If action is Send, Unset or an error, we need to stop collecting 
190-             self . collecting  =  false ; 
192+             self . collecting . store ( false ,   Ordering :: Relaxed ) ; 
191193        } 
192194        action
193195    } 
@@ -206,14 +208,14 @@ impl TracerFlareManager {
206208     /// * `Ok(ReturnAction)` - If successful. 
207209     /// * `FlareError(msg)` - If something fail. 
208210     pub  fn  handle_remote_config_file ( 
209-         & mut   self , 
211+         & self , 
210212        file :  RemoteConfigFile , 
211213    )  -> Result < ReturnAction ,  FlareError >  { 
212214        match  file. contents ( ) . as_ref ( )  { 
213215            Ok ( data)  => self . handle_remote_config_data ( data) , 
214216            Err ( e)  => { 
215217                // If encounter an error we need to stop collecting 
216-                 self . collecting  =  false ; 
218+                 self . collecting . store ( false ,   Ordering :: Relaxed ) ; 
217219                Err ( FlareError :: ParsingError ( e. to_string ( ) ) ) 
218220            } 
219221        } 
@@ -455,9 +457,9 @@ pub async fn run_remote_config_listener(
455457    } 
456458
457459    if  let  ReturnAction :: Set ( _)  = state { 
458-         tracer_flare. collecting  =  true ; 
460+         tracer_flare. collecting . store ( true ,   Ordering :: Relaxed ) ; 
459461    }  else  if  let  ReturnAction :: Send ( _)  = state { 
460-         tracer_flare. collecting  =  false ; 
462+         tracer_flare. collecting . store ( false ,   Ordering :: Relaxed ) ; 
461463    } 
462464
463465    Ok ( state) 
@@ -475,6 +477,7 @@ mod tests {
475477        file_storage:: ParsedFileStorage , 
476478        RemoteConfigPath ,  RemoteConfigProduct ,  RemoteConfigSource , 
477479    } ; 
480+     use  std:: sync:: atomic:: Ordering ; 
478481    use  std:: { num:: NonZeroU64 ,  sync:: Arc } ; 
479482
480483    #[ test]  
@@ -637,7 +640,7 @@ mod tests {
637640    #[ test]  
638641    fn  test_handle_remote_config_file ( )  { 
639642        use  crate :: TracerFlareManager ; 
640-         let  mut   tracer_flare = TracerFlareManager :: new ( "http://localhost:8126" ,  "rust" ) ; 
643+         let  tracer_flare = TracerFlareManager :: new ( "http://localhost:8126" ,  "rust" ) ; 
641644        let  storage = ParsedFileStorage :: default ( ) ; 
642645
643646        let  agent_config_file = storage
@@ -660,19 +663,19 @@ mod tests {
660663            . unwrap ( ) ; 
661664
662665        // First AGENT_CONFIG 
663-         assert ! ( !tracer_flare. collecting) ; 
666+         assert ! ( !tracer_flare. collecting. load ( Ordering :: Relaxed ) ) ; 
664667        let  result = tracer_flare
665668            . handle_remote_config_file ( agent_config_file. clone ( ) ) 
666669            . unwrap ( ) ; 
667670        assert_eq ! ( result,  ReturnAction :: Set ( LogLevel :: Info ) ) ; 
668-         assert ! ( tracer_flare. collecting) ; 
671+         assert ! ( tracer_flare. collecting. load ( Ordering :: Relaxed ) ) ; 
669672
670673        // Second AGENT_CONFIG 
671674        let  result = tracer_flare
672675            . handle_remote_config_file ( agent_config_file) 
673676            . unwrap ( ) ; 
674677        assert_eq ! ( result,  ReturnAction :: None ) ; 
675-         assert ! ( tracer_flare. collecting) ; 
678+         assert ! ( tracer_flare. collecting. load ( Ordering :: Relaxed ) ) ; 
676679
677680        // Non-None actions stop collecting 
678681        let  error_file = storage
@@ -689,7 +692,7 @@ mod tests {
689692            . unwrap ( ) ; 
690693
691694        let  _ = tracer_flare. handle_remote_config_file ( error_file) ; 
692-         assert ! ( !tracer_flare. collecting) ; 
695+         assert ! ( !tracer_flare. collecting. load ( Ordering :: Relaxed ) ) ; 
693696    } 
694697
695698    #[ test]  
0 commit comments