Skip to content

Sync X server after creating XRecord context - #9

Merged
developer239 merged 2 commits into
developer239:masterfrom
dimonp:master
Nov 11, 2026
Merged

developer239 merged 2 commits into
developer239:masterfrom
dimonp:master

Conversation

@dimonp

@dimonp dimonp commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Flush the X connection following XRecordCreateContext so the record context is fully registered before the event tap starts.

Error log:
robot-cpp/build/bin$ ./example_record_replay
Recording for 5 seconds...
X Error of failed request: XRecordBadContext
Major opcode of failed request: 143 (RECORD)
Minor opcode of failed request: 5 (XRecordEnableContext)
Context in failed request: 0x8c00001
Serial number of failed request: 10
Current serial number in output stream: 10

References:

• Xlib: XSync Documentation — Explains how XSync flushes the output buffer and waits until all requests have been processed.
• X Record Extension Specification — Details the asynchronous nature of context creation and resource allocation.

@developer239 developer239 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Thank you @dimonp, and welcome as the first outside contributor to robot-cpp! 🎉

Good catch, and a clear write-up. XRecordCreateContext only queues the request on the control connection, while XRecordEnableContext goes out on the separate data connection, so the server could see the enable before the context existed. XSync on the control connection closes that race. I updated the branch from master so CI ran against the current code, and it passed on Linux, macOS and Windows. Merging, and it will ship in the next robot-ts release.

@developer239
developer239 merged commit 5d6e8da into developer239:master Nov 11, 2026
4 checks passed
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