diff --git a/src/agent/onefuzz-telemetry/src/lib.rs b/src/agent/onefuzz-telemetry/src/lib.rs index 0bd203cbe..5a888ddf6 100644 --- a/src/agent/onefuzz-telemetry/src/lib.rs +++ b/src/agent/onefuzz-telemetry/src/lib.rs @@ -200,18 +200,16 @@ mod global { pub fn set_clients(instance: Option, shared: Option) { use Ordering::SeqCst; - let last_state = STATE.compare_and_swap(UNSET, SETTING, SeqCst); + let result = STATE.compare_exchange(UNSET, SETTING, SeqCst, SeqCst); - if last_state == SETTING { - panic!("race while setting telemetry client"); + match result { + Ok(SETTING) => panic!("race while setting telemetry client"), + Ok(SET) => panic!("tried to reset telemetry client"), + Ok(UNSET) => {} + Ok(state) => panic!("unknown telemetry client state while setting: {}", state), + Err(state) => panic!("failed to set telemetry client state: {}", state), } - if last_state == SET { - panic!("tried to reset telemetry client"); - } - - assert_eq!(last_state, UNSET, "unexpected telemetry client state"); - unsafe { CLIENTS.instance = instance.map(RwLock::new); CLIENTS.shared = shared.map(RwLock::new); @@ -230,18 +228,16 @@ mod global { pub fn take_clients() -> Vec { use Ordering::SeqCst; - let last_state = STATE.compare_and_swap(SET, SETTING, SeqCst); + let result = STATE.compare_exchange(SET, SETTING, SeqCst, SeqCst); - if last_state == SETTING { - panic!("race while taking telemetry client"); + match result { + Ok(SETTING) => panic!("race while taking telemetry client"), + Ok(SET) => {} + Ok(UNSET) => panic!("tried to take unset telemetry client"), + Ok(state) => panic!("unknown telemetry client state while taking: {}", state), + Err(state) => panic!("failed to take telemetry client state: {}", state), } - if last_state == UNSET { - panic!("tried to take unset telemetry client"); - } - - assert_eq!(last_state, SET, "unexpected telemetry client state"); - let instance = unsafe { CLIENTS.instance.take() }; let shared = unsafe { CLIENTS.shared.take() };