[PR #4868] Refactor Darwin sleep/wake handling with channel-based coordination #24358

Open
opened 2026-08-05 06:08:35 -04:00 by saavagebueno · 0 comments
Owner

Original Pull Request: https://github.com/netbirdio/netbird/pull/4868

State: closed
Merged: No


Describe your changes

Summary

  • Implement channel-based coordination for sleep/wake events on Darwin systems to prevent engine restarts during system sleep
  • Set connecting state earlier in the connection flow to improve status reporting accuracy

Changes

Sleep/Wake Event Handling:

  • Add sleepChan to ConnectClient for sleep/wake notifications (true = sleep, false = wake)
  • Add restartChan to ConnectClient for network change restart requests
  • Implement new sleephandler package using mac-sleep-notifier library for native macOS sleep/wake detection
  • Remove polling-based kern.sleeptime sysctl approach from network monitor
  • Centralize engine lifecycle control in ConnectClient.run() select loop that serializes sleep, wake, restart, and shutdown events
  • During sleep: engine stops and blocks until wake event, ignoring network monitor restart requests
  • On wake: engine unblocks and restarts cleanly
    Connection State Management:
  • Move StatusConnecting state setting to connectWithRetryRuns for earlier status reporting
  • Add Stop() method to Server to properly cleanup sleep handler

Benefits:

  • Single control point prevents competing lifecycle management
  • Engine won't attempt restart while system is sleeping
  • Clean separation: sleep handler signals, ConnectClient controls
  • Graceful handling when ConnectClient not initialized

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)

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)

Docs PR URL (required if "docs added" is checked)

Paste the PR link from https://github.com/netbirdio/docs here:

https://github.com/netbirdio/docs/pull/__

Summary by CodeRabbit

  • New Features

    • Adds macOS system sleep/wake detection to handle suspend/resume events.
  • Improvements

    • More reliable shutdown of background services for cleaner resource cleanup.
    • Refined engine restart signaling to reduce spurious restarts and improve stability during network changes.
    • Server now better tracks connection state during connect attempts.
  • Bug Fixes

    • Ensures daemon server stops as part of the client shutdown flow.

✏️ Tip: You can customize this high-level summary in your review settings.

**Original Pull Request:** https://github.com/netbirdio/netbird/pull/4868 **State:** closed **Merged:** No --- ## Describe your changes ### Summary - Implement channel-based coordination for sleep/wake events on Darwin systems to prevent engine restarts during system sleep - Set connecting state earlier in the connection flow to improve status reporting accuracy ### Changes Sleep/Wake Event Handling: - Add sleepChan to ConnectClient for sleep/wake notifications (true = sleep, false = wake) - Add restartChan to ConnectClient for network change restart requests - Implement new sleephandler package using mac-sleep-notifier library for native macOS sleep/wake detection - Remove polling-based kern.sleeptime sysctl approach from network monitor - Centralize engine lifecycle control in ConnectClient.run() select loop that serializes sleep, wake, restart, and shutdown events - During sleep: engine stops and blocks until wake event, ignoring network monitor restart requests - On wake: engine unblocks and restarts cleanly Connection State Management: - Move StatusConnecting state setting to connectWithRetryRuns for earlier status reporting - Add Stop() method to Server to properly cleanup sleep handler ### Benefits: - Single control point prevents competing lifecycle management - Engine won't attempt restart while system is sleeping - Clean separation: sleep handler signals, ConnectClient controls - Graceful handling when ConnectClient not initialized ## Issue ticket number and link ## Stack <!-- branch-stack --> ### Checklist - [ ] Is it a bug fix - [ ] Is a typo/documentation fix - [ ] Is a feature enhancement - [x] It is a refactor - [ ] Created tests that fail without the change (if possible) > 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) ### Docs PR URL (required if "docs added" is checked) Paste the PR link from https://github.com/netbirdio/docs here: https://github.com/netbirdio/docs/pull/__ <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Adds macOS system sleep/wake detection to handle suspend/resume events. * **Improvements** * More reliable shutdown of background services for cleaner resource cleanup. * Refined engine restart signaling to reduce spurious restarts and improve stability during network changes. * Server now better tracks connection state during connect attempts. * **Bug Fixes** * Ensures daemon server stops as part of the client shutdown flow. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
saavagebueno added the pull-request label 2026-08-05 06:08:35 -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#24358