Skip to content

fix(dvc): allow channel listeners to serve a re-created channel - #2106

Open
YaoSiQian (YaoSiQian) wants to merge 1 commit into
Devolutions:masterfrom
YaoSiQian:fix/dvc-channel-recycle
Open

YaoSiQian (YaoSiQian) wants to merge 1 commit into
Devolutions:masterfrom
YaoSiQian:fix/dvc-channel-recycle

Conversation

@YaoSiQian

Copy link
Copy Markdown

Summary

Servers periodically close and re-create the same dynamic virtual channel (e.g. MS-RDPEDISP display control). A single-use listener turned that re-create into NO_LISTENER, permanently dropping the channel.

Changes

  • New DvcChannelListener::recycle hook hands the processor of a closing channel back to its listener so a later CREATE can be served again; OnceListener re-arms when it has no processor, and the default keeps the previous drop-on-close behavior.
  • DynamicVirtualChannel now holds an Option processor; a recycled channel no longer double-notifies close on drop.

Testing

  • cargo check across the client, web, testsuite and example targets with zero warnings; exercised with servers that cycle the display control channel.

Copilot AI balanced review requested due to automatic review settings October 10, 2026 14:05

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added breaking-change Includes a breaking change, and requires special scrutiny at the boundaries kind/protocol Affects RDP or related protocol behavior kind/technical-debt Internal cleanup work risk/high Substantial core public API impact, or fail-closed triage; needs maintainer-level scrutiny scope/core Touches the core architectural tier scope/cross-cutting Spans multiple architectural boundaries scope/web Affects the web/WASM ecosystem size/XXL Size: 1300 or more counted lines or 50 or more files triage/overlap Possible overlap with another pull request; advisory only labels Oct 10, 2026
Servers periodically close and re-create the same dynamic virtual
channel (e.g. MS-RDPEDISP display control). A single-use listener
turned the re-create into NO_LISTENER, permanently dropping the
channel.

Give DvcChannelListener a recycle hook that hands the processor of a
closing channel back to its listener so a later CREATE can be served
again. OnceListener re-arms when it has no processor; the default
implementation keeps the previous drop-on-close behavior, and a
recycled channel no longer double-notifies close on drop.
@github-actions github-actions Bot added risk/medium Behavioral change that does not substantially alter a core public API size/S Size: up to 199 counted lines and 5 files; exceeds XS in either measure and removed risk/high Substantial core public API impact, or fail-closed triage; needs maintainer-level scrutiny scope/web Affects the web/WASM ecosystem size/XXL Size: 1300 or more counted lines or 50 or more files scope/cross-cutting Spans multiple architectural boundaries kind/technical-debt Internal cleanup work triage/overlap Possible overlap with another pull request; advisory only breaking-change Includes a breaking change, and requires special scrutiny at the boundaries labels Oct 10, 2026

This branch was successfully deployed

1 active deployment
llm-providers — ad3ce9c3 Deployed Oct 10, 2026 by YaoSiQian via Classify pull request #2528
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/protocol Affects RDP or related protocol behavior risk/medium Behavioral change that does not substantially alter a core public API scope/core Touches the core architectural tier size/S Size: up to 199 counted lines and 5 files; exceeds XS in either measure

Development

Successfully merging this pull request may close these issues.

2 participants