[PR #6813] [client] Add Windows sleep detection for pre-sleep down and wake up #29052

Open
opened 2026-08-05 08:07:22 -04:00 by saavagebueno · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/netbirdio/netbird/pull/6813
Author: @lixmal
Created: 7/17/2026
Status: 🔄 Open

Base: mainHead: windows-sleep-detector


📝 Commits (3)

  • 67af1b2 Add Windows sleep detection for pre-sleep down/wake up
  • c533dea Merge branch 'main' into windows-sleep-detector
  • 25fe7d1 Keep Windows power notification handle when unregister fails

📊 Changes

3 files changed (+339 additions, -1 deletions)

View changed files

📝 client/internal/sleep/detector_notsupported.go (+1 -1)
client/internal/sleep/detector_windows.go (+255 -0)
client/internal/sleep/detector_windows_test.go (+83 -0)

📄 Description

Describe your changes

Adds sleep/wake detection on Windows so the client cleanly disconnects before the machine suspends and reconnects after it wakes. This mirrors the existing macOS behavior and works around cases where DNS and connectivity do not recover on their own after a sleep/wake cycle. The sleep handler (down on suspend, up on wake) already existed and was macOS-only; this wires a Windows detector into it.

  • Add a Windows sleep detector that subscribes to OS suspend/resume notifications via user32.dll and forwards them to the shared sleep handler
  • Enable the sleep detection path on Windows (previously it reported "not supported on this platform")
  • Add unit tests for the event mapping, dispatch routing, and post-teardown guard

Stack

Checklist

  • Is it a bug fix
  • Is a typo/documentation fix
  • Is a feature enhancement
  • It is a refactor
  • Created tests that fail without the change (if possible)
  • This change does not modify the public API, gRPC protocols, functionality behavior, CLI / service flags, or introduce a new feature — OR I have discussed it with the NetBird team beforehand (link the issue / Slack thread in the description). See CONTRIBUTING.md.

By submitting this pull request, you confirm that you have read and agree to the terms of the Contributor License Agreement.

Documentation

Select exactly one:

  • I added/updated documentation for this change
  • Documentation is not needed for this change (explain why)

Internal behavior on suspend/resume; no user-facing configuration or API surface.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.

Summary by CodeRabbit

  • New Features
    • Added Windows support for detecting system sleep and wake events.
    • Applications can register and deregister callbacks for suspend and resume notifications.
  • Bug Fixes
    • Ensured the unsupported sleep detector implementation is not used on Windows.
    • Improved robustness when deregistering while callbacks may still be pending.
  • Tests
    • Added Windows test coverage for suspend/resume event mapping and callback dispatch behavior.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/netbirdio/netbird/pull/6813 **Author:** [@lixmal](https://github.com/lixmal) **Created:** 7/17/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `windows-sleep-detector` --- ### 📝 Commits (3) - [`67af1b2`](https://github.com/netbirdio/netbird/commit/67af1b2ef2f8a3f8fd36ae97ea109508dd3000c6) Add Windows sleep detection for pre-sleep down/wake up - [`c533dea`](https://github.com/netbirdio/netbird/commit/c533dead282e234295e8c8be2035834133b896fe) Merge branch 'main' into windows-sleep-detector - [`25fe7d1`](https://github.com/netbirdio/netbird/commit/25fe7d13d91a4227f67bddf1b6aeabf842bd611c) Keep Windows power notification handle when unregister fails ### 📊 Changes **3 files changed** (+339 additions, -1 deletions) <details> <summary>View changed files</summary> 📝 `client/internal/sleep/detector_notsupported.go` (+1 -1) ➕ `client/internal/sleep/detector_windows.go` (+255 -0) ➕ `client/internal/sleep/detector_windows_test.go` (+83 -0) </details> ### 📄 Description ## Describe your changes Adds sleep/wake detection on Windows so the client cleanly disconnects before the machine suspends and reconnects after it wakes. This mirrors the existing macOS behavior and works around cases where DNS and connectivity do not recover on their own after a sleep/wake cycle. The sleep handler (down on suspend, up on wake) already existed and was macOS-only; this wires a Windows detector into it. - Add a Windows sleep detector that subscribes to OS suspend/resume notifications via `user32.dll` and forwards them to the shared sleep handler - Enable the sleep detection path on Windows (previously it reported "not supported on this platform") - Add unit tests for the event mapping, dispatch routing, and post-teardown guard ## Issue ticket number and link ## Stack <!-- branch-stack --> ### Checklist - [x] Is it a bug fix - [ ] Is a typo/documentation fix - [x] Is a feature enhancement - [ ] It is a refactor - [x] Created tests that fail without the change (if possible) - [ ] This change does **not** modify the public API, gRPC protocols, functionality behavior, CLI / service flags, or introduce a new feature — **OR** I have discussed it with the NetBird team beforehand (link the issue / Slack thread in the description). See [CONTRIBUTING.md](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTING.md#discuss-changes-with-the-netbird-team-first). > By submitting this pull request, you confirm that you have read and agree to the terms of the [Contributor License Agreement](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT.md). ## Documentation Select exactly one: - [ ] I added/updated documentation for this change - [x] Documentation is **not needed** for this change (explain why) Internal behavior on suspend/resume; no user-facing configuration or API surface. <!-- codesmith:footer --> --- <a href="https://app.blacksmith.sh/netbirdio/codesmith/netbird/pr/6813"><picture><source media="(prefers-color-scheme: dark)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg"><source media="(prefers-color-scheme: light)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-light-v2.svg"><img alt="View with Codesmith" src="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg"></picture></a> <a href="https://backend.blacksmith.sh/track/enable-autofix?expires=1786876881&installation_id=146802194&pr_number=6813&repository=netbirdio%2Fnetbird&return_to=https%3A%2F%2Fgithub.com%2Fnetbirdio%2Fnetbird%2Fpull%2F6813&signature=89dcf76b332a35c21d56780450e8ea8571694e81e95bffff52b3218c96ab3f0b"><picture><source media="(prefers-color-scheme: dark)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-light.svg"><img alt="Autofix with Codesmith" src="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg"></picture></a> <sup>Need help on this PR? Tag <code>/codesmith</code> with what you need. Autofix is disabled.</sup> <!-- codesmith:autofix:disabled --> <!-- /codesmith:footer --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Windows support for detecting system sleep and wake events. * Applications can register and deregister callbacks for suspend and resume notifications. * **Bug Fixes** * Ensured the unsupported sleep detector implementation is not used on Windows. * Improved robustness when deregistering while callbacks may still be pending. * **Tests** * Added Windows test coverage for suspend/resume event mapping and callback dispatch behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
saavagebueno added the pull-request label 2026-08-05 08:07:22 -04:00
Sign in to join this conversation.
No Label pull-request
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: DYNR/netbird#29052