From 3d0db426fa76f7ecede0c941aba8251cab1909b0 Mon Sep 17 00:00:00 2001 From: Joachim Bauch Date: Thu, 14 Aug 2025 14:40:48 +0200 Subject: [PATCH] Use methods on atomic class instead of custom implementation. --- flags.go | 39 +++++---------------------------------- 1 file changed, 5 insertions(+), 34 deletions(-) diff --git a/flags.go b/flags.go index 3f67283..e089e1e 100644 --- a/flags.go +++ b/flags.go @@ -30,46 +30,17 @@ type Flags struct { } func (f *Flags) Add(flags uint32) bool { - for { - old := f.flags.Load() - if old&flags == flags { - // Flags already set. - return false - } - newFlags := old | flags - if f.flags.CompareAndSwap(old, newFlags) { - return true - } - // Another thread updated the flags while we were checking, retry. - } + old := f.flags.Or(flags) + return old&flags != flags } func (f *Flags) Remove(flags uint32) bool { - for { - old := f.flags.Load() - if old&flags == 0 { - // Flags not set. - return false - } - newFlags := old & ^flags - if f.flags.CompareAndSwap(old, newFlags) { - return true - } - // Another thread updated the flags while we were checking, retry. - } + old := f.flags.And(^flags) + return old&flags != 0 } func (f *Flags) Set(flags uint32) bool { - for { - old := f.flags.Load() - if old == flags { - return false - } - - if f.flags.CompareAndSwap(old, flags) { - return true - } - } + return f.flags.Swap(flags) != flags } func (f *Flags) Get() uint32 {