mirror of
https://github.com/netbirdio/netbird.git
synced 2026-07-28 00:42:37 -04:00
[client] Keep tray quit state across an aborted Windows session end
An aborted session end (WM_ENDSESSION with wParam == 0) cleared the shared shutdown flag, re-enabling hide-on-close cancels and dialogs while a tray quit was still tearing down. Track the session-end and tray-quit sources as separate flags; aborting a session end only clears its own state.
This commit is contained in:
@@ -2,16 +2,23 @@ package services
|
||||
|
||||
import "sync/atomic"
|
||||
|
||||
var shuttingDown atomic.Bool
|
||||
var (
|
||||
sessionEnding atomic.Bool
|
||||
quitting atomic.Bool
|
||||
)
|
||||
|
||||
func BeginShutdown() {
|
||||
shuttingDown.Store(true)
|
||||
func BeginSessionEnd() {
|
||||
sessionEnding.Store(true)
|
||||
}
|
||||
|
||||
func AbortShutdown() {
|
||||
shuttingDown.Store(false)
|
||||
func AbortSessionEnd() {
|
||||
sessionEnding.Store(false)
|
||||
}
|
||||
|
||||
func BeginShutdown() {
|
||||
quitting.Store(true)
|
||||
}
|
||||
|
||||
func ShuttingDown() bool {
|
||||
return shuttingDown.Load()
|
||||
return sessionEnding.Load() || quitting.Load()
|
||||
}
|
||||
|
||||
@@ -19,11 +19,11 @@ func endSessionInterceptor() func(hwnd uintptr, msg uint32, wParam, lParam uintp
|
||||
return func(_ uintptr, msg uint32, wParam, _ uintptr) (uintptr, bool) {
|
||||
switch msg {
|
||||
case wmQueryEndSession:
|
||||
services.BeginShutdown()
|
||||
services.BeginSessionEnd()
|
||||
return 1, true
|
||||
case wmEndSession:
|
||||
if wParam == 0 {
|
||||
services.AbortShutdown()
|
||||
services.AbortSessionEnd()
|
||||
return 0, true
|
||||
}
|
||||
log.Info("windows session is ending; exiting immediately")
|
||||
|
||||
Reference in New Issue
Block a user