Skip to content

Upstream changes#1

Open
follesoe wants to merge 22 commits into
BluEye-Robotics:masterfrom
zeromq:master
Open

Upstream changes#1
follesoe wants to merge 22 commits into
BluEye-Robotics:masterfrom
zeromq:master

Conversation

@follesoe
Copy link
Copy Markdown
Member

@follesoe follesoe commented May 4, 2026

No description provided.

Christoph Bauer and others added 22 commits April 16, 2026 10:02
- Add UDP address and engine implementation
- Add UDP listener for accepting connections
- Update SessionBase and SocketBase for UDP compatibility
- Update Radio pattern to support UDP
- Add comprehensive UDP unit tests
…/implement_UDP

feat: Implement UDP transport support
Scope push trigger to master branch only, so PRs no longer trigger
both push and pull_request workflows simultaneously.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prevent duplicate CI runs on pull requests
…1148)

* Initial plan

* Add macOS CI job and regression test for Cleanup(block: false) bounded time

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/18a93bf8-a14c-4c0d-9f27-b797b58f300f

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS/Windows CI hang: correct second Select timeout, fix Cleanup lock scope, harden test thread

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/259a6416-41cd-429e-8110-4e1559b0130e

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Remove macOS Socket.Select workaround — the dotnet/corefx#39617 bug is fixed in .NET 9+

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/0798ef7e-5281-4907-afe0-676d68fe60c2

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS Socket.Select hang: pass null errorList to avoid dotnet/corefx#39617

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/c84022ee-fa21-46a4-9cea-b5920dcf2ab5

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS hang: cap Socket.Select timeout to 500ms to prevent indefinite blocking

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/657e4fe7-212a-434e-a43f-b35f96202cb7

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Instrument macOS CI: add blame-hang diagnostics, filter out BeaconTests, add timeout

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/f7a57fef-51ae-409f-b0b6-db12c8b037d8

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS CI test failures: increase timer test sleep margins

Three timer tests (RunMultipleTimes, EnableTimer, ChangeTimerInterval) in
NetMQPollerTest failed on macOS CI with one fewer timer tick than expected.
These tests use 10-20ms timer intervals with tight 6x sleep multipliers.
On macOS CI runners, thread startup and Socket.Select overhead eat into
the window, causing the timer to miss one tick before Stop() is called.

Fix: increase sleep multipliers from 6x to 30x for timer-interval tests,
and from 200ms to 500ms for ChangeTimerInterval. The tests verify timer
functionality (correct count, enable/disable), not precise timing.

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/e2aa0d2e-02b9-4fd2-9f89-e0fa13d4bd0a

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS CI test failures: TwoTimers, ChangeTimerInterval, AsyncEnumerableCanceled, ReceiveMessageWithTimeout

- TwoTimers: increase timer intervals from 60/40ms to 300/200ms to prevent
  both timers firing in the same poll cycle on macOS where startup overhead
  can push the first cycle past both short intervals

- ChangeTimerInterval: widen assertion tolerance from ±10ms to ±20ms for
  macOS timer jitter

- AsyncEnumerableCanceled: increase test timeout from 120ms to 5000ms and
  CancelAfter from 100ms to 500ms — the original 120ms total was too tight
  for macOS CI overhead

- ReceiveMessageWithTimeout: use random port instead of hardcoded 12345 and
  add 10s timeouts to WaitOne calls to prevent indefinite hangs if the
  sync flow breaks

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/34687bca-d1b9-45ab-a927-4e3dfe336abe

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS CI test failures: RemoveTimer (increase timer to 500ms) and ChangeTimerInterval (increase intervals to 100/200ms with ±50ms tolerance)

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/e0c39150-967d-455b-9da2-820d3ef351db

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix ReceiveMessageWithTimeout flaky test: increase waitTime to 1500ms and subscription propagation delay to 500ms

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/2c095c5d-19b8-4a3b-8c5c-6c70a8c34cff

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix macOS CI flaky tests: ChangeTimerInterval (500/1000ms intervals, ±200ms tolerance) and ReceiveMessageWithTimeout (10s receive timeout)

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/36ba2064-01fa-4291-8041-fe7a6f6e83ca

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Add blame-hang timeout and timeout-minutes to Windows test steps to prevent indefinite hangs on net472

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/7ff6814f-81c7-4600-b443-e21477c8dcb3

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix TwoTimers flaky test: increase timer gap to 750/500ms to prevent same-cycle firing on macOS

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/a04578dc-c753-46a9-8897-f4fd9497ae0c

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Replace hardcoded port 55367 with dynamic ports in CurveTests and ZMTPTests, and fix other hardcoded ports in SocketTests and RouterTests

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/a9a483f4-dbe3-48a8-9731-f08cec715524

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Add timeout-minutes and --blame-hang to Windows coverage step to prevent 6-hour hangs

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/249453e6-4728-40d3-af1f-42eee4812eef

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix MonitorTests timeout from 1s to 5s for macOS CI

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/33f9198c-c62d-49f5-8d55-da446c1f5d4f

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
* Initial plan

* fix: make MockBufferPool and MockCounterPool thread-safe

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/87b94533-1c37-41d6-a3d7-017f2c5e89f2

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
…tPipe (#1153)

* Initial plan

* Fix race condition on m_lastPipe in XPub manual subscribe mode

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/c4786470-ce78-4365-a544-f6685acb34b5

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
…ocessTerm (#1154)

* Initial plan

* Fix thread-unsafe concurrent modification of m_pipes in SocketBase.ProcessTerm

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/414caa2a-c46e-4c61-8633-737221f630a1

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Replace List<Pipe> with ImmutableArray for thread-safe m_pipes, add regression test

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/18e27ca4-e99b-4f9a-b7c1-26e6972e6d19

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Scope System.Collections.Immutable to non-CoreApp TFMs, upgrade to 10.0.7

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/ba8d4260-afb2-4255-a0d3-1d487bb70cb7

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

* Fix two pre-existing flaky tests: MultiplePublishers ordering race and ReceiveMessageWithTimeout AutoResetEvent self-consumption

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/2c8d5680-a206-428d-9218-a720bcbfbc4e

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
…tity is enabled (#1160)

Fix null peer identity handling in StreamEngine handshake
…kets (#1161)

* Initial plan

* Handle macOS InvalidArgument from TCP NoDelay setup

Agent-Logs-Url: https://github.com/zeromq/netmq/sessions/839215c1-545a-4f5c-8937-94397dcbaed6

Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the JetBrains.Annotations package reference from Directory.Build.props
and all project-level version overrides. Strip [CanBeNull], [NotNull], and
[UsedImplicitly] attributes from all source files, along with their using
directives. No other JetBrains annotation types were in use.

The five files that still have #nullable disable will get proper native
nullable annotations in subsequent commits.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
These attributes were introduced in .NET 5 but are needed for the
netstandard2.1 and net472 targets. They will be used when annotating
late-initialized fields in subsequent commits.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove #nullable disable and annotate the generic linked-chunk queue:

- Chunk.Next and Chunk.Previous are now Chunk? (nullable linked-list links)
- Use null-forgiving operator at linked-list navigation points where
  queue invariants guarantee non-null (Pop, Push, Unpush)
- Replace default(T) with default! for slot clearing
- Remove redundant Debug.Assert(Values != null) after array construction

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove #nullable disable and annotate all nullable types:
- m_next is now Trie?[]? (nullable array of nullable elements)
- TrieDelegate data/arg parameters are nullable
- Use null-forgiving operator where trie invariants guarantee non-null
- Fix downstream XSub.cs warning from nullable delegate arg
- Remove unused using and redundant Debug.Assert

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove #nullable disable and annotate all nullable types:
- m_pipes is now HashSet<Pipe>? (null when no subscriptions)
- m_next is now MultiTrie?[]? (nullable array of nullable elements)
- MultiTrieDelegate data/arg parameters are nullable
- Remove bogus Debug.Assert(prefix != null) for Span<byte> (fixes CA2265)
- Use null-forgiving operator where trie invariants guarantee non-null
- Fix downstream XPub.cs warnings from nullable delegate arg

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove #nullable disable and annotate all nullable types:
- m_reaper is now Reaper? (late-initialized in CreateSocket)
- m_slots is now IMailbox?[]? (late-initialized, elements nullable)
- ChooseIOThread returns IOThread? (already matched by ZObject wrapper)
- Use null-forgiving operator where lifecycle invariants guarantee non-null
- Remove redundant Debug.Assert(addr != null) on non-nullable parameter

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove #nullable disable and annotate all nullable types:
- m_handle, m_session, m_socket, m_ioObject are lifecycle-nullable
- m_encoder, m_decoder, m_mechanism are nullable until handshake
- m_inpos, m_outpos are nullable buffer positions
- Use null-forgiving operator where state machine invariants guarantee
  non-null (post-Plug, post-handshake, post-V3-handshake)
- Remove redundant null assignments in constructor for nullable fields

This is the file that motivated the nullable annotation effort (PR #1160).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants