Skip to content

GUACAMOLE-2221: fix RDP busy-loop on transport failure#635

Open
pwgcz wants to merge 1 commit intoapache:mainfrom
pwgcz:GUACAMOLE-2118-fix-RDP-busy-loop-on-transport-failure
Open

GUACAMOLE-2221: fix RDP busy-loop on transport failure#635
pwgcz wants to merge 1 commit intoapache:mainfrom
pwgcz:GUACAMOLE-2118-fix-RDP-busy-loop-on-transport-failure

Conversation

@pwgcz
Copy link

@pwgcz pwgcz commented Feb 16, 2026

When an RDP connection hits a transport-level
failure (for example, a certificate error), the
inner event loop in rdp.c can spin at 100% CPU.

This happens because the error state in
wait_result gets overwritten. When the issue
occurs, guac_rdp_handle_events() sets wait_result
to -1, but the loop doesn’t exit immediately. In
the next iteration, the while condition assigns
wait_result from rdp_guac_client_wait_for_events()
effectively clearing the error flag. As a result,
the loop never observes the transport failure and
continues polling, spinning the CPU.

Fix: break out of the loop immediately after
guac_rdp_handle_events() fails, so we stop
processing when FreeRDP reports a connection
error.

When an RDP connection hits a transport-level
failure (for example, a certificate error), the
inner event loop in rdp.c can spin at 100% CPU.

This happens because the error state in
wait_result gets overwritten. When the issue
occurs, guac_rdp_handle_events() sets wait_result
to -1, but the loop doesn’t exit immediately. In
the next iteration, the while condition assigns
wait_result from rdp_guac_client_wait_for_events()
effectively clearing the error flag. As a result,
the loop never observes the transport failure and
continues polling, spinning the CPU.

Fix: break out of the loop immediately after
guac_rdp_handle_events() fails, so we stop
processing when FreeRDP reports a connection
error.
@pwgcz pwgcz changed the title GUACAMOLE-2118: fix RDP busy-loop on transport failure GUACAMOLE-2221: fix RDP busy-loop on transport failure Feb 17, 2026
Copy link
Contributor

@necouchman necouchman left a comment

Choose a reason for hiding this comment

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

@pwgcz As discussed in the Jira ticket, I don't think we want to simply revert the previous patch, as that just reintroduces the issue that the commit resolves. You had suggested an alternate approach in the Jira issue - you're welcome to update this PR with that approach and we can see if that addresses the issue without (re)introducing other issues.

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.

2 participants