Skip to content

Fix UI-thread hang when resuming the target during launch#1596

Draft
WardenGnaw wants to merge 1 commit into
mainfrom
dev/waan/2987836
Draft

Fix UI-thread hang when resuming the target during launch#1596
WardenGnaw wants to merge 1 commit into
mainfrom
dev/waan/2987836

Conversation

@WardenGnaw

Copy link
Copy Markdown
Member

AD7Engine.ContinueFromSynchronousEvent (the AD7ProgramCreateEvent path) dispatched ResumeFromLaunch through the blocking WorkerThread.RunOperation, coupling the VS UI/SDM thread to debugger I/O. Over a slow or remote (SSH) transport, AD7Engine.ContinueFromSynchronousEvent + ResumeFromLaunch could stall for a long time or indefinitely, producing a Watson hang.

  • Add WorkerThread.PostAsyncOperation, a non-blocking dispatch that claims the running-op slot (so later AD7 operations still serialize behind it) but returns without waiting for completion. Faults from the operation are routed to an onError callback from both the synchronous and async completion paths.

  • ContinueFromSynchronousEvent now posts ResumeFromLaunch via PostAsyncOperation and returns S_OK immediately, so the UI thread is no longer blocked. Resume faults report through SendStartDebuggingError + Terminate via onError, and synchronous failures (OnLoadComplete or the dispatch itself) are still handled locally, since the SDM drops errors returned from this method.

  • Built and tested locally

    • Debugged through WSL Linux gdb and the async resume completed.

AD7Engine.ContinueFromSynchronousEvent (the AD7ProgramCreateEvent path)
dispatched ResumeFromLaunch through the blocking WorkerThread.RunOperation,
coupling the VS UI/SDM thread to debugger I/O. Over a slow or remote (SSH)
transport, AD7Engine.ContinueFromSynchronousEvent + ResumeFromLaunch could
stall for a long time or indefinitely, producing a Watson hang.

- Add WorkerThread.PostAsyncOperation, a non-blocking dispatch that claims the
  running-op slot (so later AD7 operations still serialize behind it) but
  returns without waiting for completion. Faults from the operation are routed
  to an onError callback from both the synchronous and async completion paths.
- ContinueFromSynchronousEvent now posts ResumeFromLaunch via PostAsyncOperation
  and returns S_OK immediately, so the UI thread is no longer blocked. Resume
  faults report through SendStartDebuggingError + Terminate via onError, and
  synchronous failures (OnLoadComplete or the dispatch itself) are still handled
  locally, since the SDM drops errors returned from this method.

- [x] Built and tested locally
  - [x] Debugged through WSL Linux gdb and the async resume completed.
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.

1 participant