go-toast

Send toast notifications in Windows
Log | Files | Refs | README | LICENSE

commit a452fa246783c615d931148aea6296716c59d19b
parent d9dbb391d85e5beff96924ef4a9ce1d1e0bc345e
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date:   Tue,  5 Dec 2023 18:52:01 +0800

wintoast: simplify init guard

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>

Diffstat:
Mwintoast/bind_windows.go | 23++++++-----------------
1 file changed, 6 insertions(+), 17 deletions(-)

diff --git a/wintoast/bind_windows.go b/wintoast/bind_windows.go @@ -8,7 +8,7 @@ import ( "io" "os" "os/exec" - "sync" + "sync/atomic" "syscall" "unsafe" @@ -131,29 +131,18 @@ func setAppData(data AppData) (err error) { return nil } -var ( - initLock sync.Mutex - didInitialize bool -) +var initialized atomic.Bool // initialize attempts to initialize the Windows Runtime. // Each invocation will retry RoInitialize until a successful initialization // is achieved. Once initialized, we avoid invoking RoInitialize since subsequent // reinitialization generates errors. func initialize() (err error) { - initLock.Lock() - defer initLock.Unlock() - - if didInitialize { - return nil - } - - if err := ole.RoInitialize(1); err != nil { - return fmt.Errorf("RoInitialize: %w", err) + if initialized.CompareAndSwap(false, true) { + if err := ole.RoInitialize(1); err != nil { + return fmt.Errorf("RoInitialize: %w", err) + } } - - didInitialize = true - return nil }