[PR #4824] [management] Refactor job channel management to prevent panics #4420

Open
opened 2025-11-20 08:08:21 -05:00 by saavagebueno · 0 comments
Owner

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

State: open
Merged: No


Introduce a Channel abstraction to wrap job event channels with proper error handling. This
prevents panics when reading from or closing channels by using explicit error returns instead of
relying on channel close signals.

Key improvements:

  • Add Channel struct with Event(), AddEvent(), and Close() methods
  • Replace select-based channel reads with Channel.Event() that returns ErrJobChannelClosed
  • Use sync.Once in Channel.Close() to prevent double-close panics
  • Remove redundant CloseChannel() calls from error paths in sendJob()
  • Simplify sendJobsLoop() and sendJob() function signatures

Describe your changes

Stack

  • feature/remote-debug-release - ⚠️ No PR associated with branch

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/__

**Original Pull Request:** https://github.com/netbirdio/netbird/pull/4824 **State:** open **Merged:** No --- Introduce a Channel abstraction to wrap job event channels with proper error handling. This prevents panics when reading from or closing channels by using explicit error returns instead of relying on channel close signals. Key improvements: - Add Channel struct with Event(), AddEvent(), and Close() methods - Replace select-based channel reads with Channel.Event() that returns ErrJobChannelClosed - Use sync.Once in Channel.Close() to prevent double-close panics - Remove redundant CloseChannel() calls from error paths in sendJob() - Simplify sendJobsLoop() and sendJob() function signatures ## Describe your changes ## Issue ticket number and link ## Stack - `feature/remote-debug-release` - :warning: No PR associated with branch <!-- branch-stack --> - \#4592 - \#4824 :point\_left: ### Checklist - [x] 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](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/>\_\_
saavagebueno added the pull-request label 2025-11-20 08:08:21 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: SVI/netbird#4420