fix: replace time.Sleep with context-aware sleeps in doPressKey and doDragMouse#146
Merged
fix: replace time.Sleep with context-aware sleeps in doPressKey and doDragMouse#146
Conversation
…oDragMouse time.Sleep in doPressKey (key hold duration) and doDragMouse (pre-drag delay) blocks without respecting context cancellation. While holding the inputMu mutex, this prevents timely cleanup on request cancellation. Extract a sleepWithContext helper and use it in all three sleep sites (doPressKey, doDragMouse, doSleep). On cancellation, best-effort cleanup releases held keys/mouse buttons before returning. Co-authored-by: Cursor <cursoragent@cursor.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
doPressKeyusedtime.Sleepfor the key hold duration, blocking without respecting context cancellation while holdinginputMudoDragMouseusedtime.Sleepfor the optional pre-drag delay, same problemChanges
sleepWithContexthelper that usesselectwithtime.NewTimerandctx.Done()doSleepto use the shared helpertime.SleepindoPressKeywithsleepWithContext; on cancellation, best-effort release held keys using a background contexttime.SleepindoDragMousewithsleepWithContext; on cancellation, best-effort release mouse button and modifier keystime.Sleepcalls incomputer.goTest plan
go build ./...andgo vet ./...passgo test ./cmd/api/api/...passesMade with Cursor
Note
Medium Risk
Touches low-level input simulation and cleanup behavior; cancellation paths now run
xdotoolreleases viacontext.Background(), which could change how interrupted requests leave system input state.Overview
Makes input-related delays context-aware to avoid blocking while
inputMuis held (notably duringBatchComputerAction).Replaces
time.SleepindoPressKeykey-hold anddoDragMousepre-drag delay with a sharedsleepWithContexthelper, and refactorsdoSleepto use it as well. On cancellation, both key-hold and drag delay now perform best-effort cleanup (releasing keys and/or mouse button) viacontext.Background()before returning an error.Written by Cursor Bugbot for commit 90ff857. This will update automatically on new commits. Configure here.