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:
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
}