From 50a59e18984f86b23843c0215f91511ac8c93b8e Mon Sep 17 00:00:00 2001 From: Joe Ardent Date: Sat, 5 Aug 2023 12:16:23 -0700 Subject: [PATCH] clean up new() logic --- src/julid.rs | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/julid.rs b/src/julid.rs index 79df358..e009ad7 100644 --- a/src/julid.rs +++ b/src/julid.rs @@ -54,24 +54,20 @@ impl Julid { .as_millis() as u64; let last = LAST_MSB.load(Ordering::SeqCst); let ots = last >> COUNTER_BITS; - if ots < ts { - let msb = ts << COUNTER_BITS; - if LAST_MSB - .compare_exchange(last, msb, Ordering::SeqCst, Ordering::Relaxed) - .is_ok() - { - break (msb, lsb).into(); - } + let msb = if ots < ts { + ts << COUNTER_BITS } else { let counter = ((last & bitmask!(COUNTER_BITS) as u64) as u16).saturating_add(1); - let msb = (ots << COUNTER_BITS) + counter as u64; - if LAST_MSB - .compare_exchange(last, msb, Ordering::SeqCst, Ordering::Relaxed) - .is_ok() - { - break (msb, lsb).into(); - } + (ots << COUNTER_BITS) + counter as u64 + }; + + if LAST_MSB + .compare_exchange(last, msb, Ordering::SeqCst, Ordering::Relaxed) + .is_ok() + { + break (msb, lsb).into(); } + // we didn't update the global counter, try again let micros = thread_rng().gen_range(10..50); std::thread::sleep(Duration::from_micros(micros));