Skip to content

Pseudo console is not released when nested native processes are moved to the background, corrupting readline completion #6391

Description

@nho-axentia

Existing issues matching what you're seeing

  • I was not able to find an open or closed issue matching what I'm seeing

Git for Windows version

git version 2.55.0.windows.5
cpu: x86_64
built from commit: 32c4f7689275d233577576630e1ac5b7eb354eb0
sizeof-long: 4
sizeof-size_t: 8
shell-path: D:/git-sdk-64-build-installers/usr/bin/sh
rust: disabled
feature: fsmonitor--daemon
gettext: enabled
libcurl: 8.21.0
OpenSSL: OpenSSL 3.5.7 9 Jun 2026
zlib: 1.3.2
SHA-1: SHA1_DC
SHA-256: SHA256_BLK
default-ref-format: files
default-hash: sha1

Windows version

Windows 11

Windows CPU architecture

x86_64 (64-bit)

Additional Windows version information

Microsoft Windows [Version 10.0.26200.9168]

Options set during installation

Editor Option: VIM
Custom Editor Path:
Default Branch Option: main
Path Option: Cmd
SSH Option: OpenSSH
Tortoise Option: false
CURL Option: WinSSL
CRLF Option: LFOnly
Bash Terminal Option: MinTTY
Git Pull Behavior Option: FFOnly
Use Credential Manager: Enabled
Performance Tweaks FSCache: Enabled
Enable Symlinks: Enabled
Enable FSMonitor: Disabled

Other interesting things

  • msys2-runtime: MINGW64_NT-10.0-26200 3.6.10-710e5275.x86_64 2026-07-28 09:32 UTC
  • mintty 3.8.3 (2026-06-09)
  • bash 5.3.15(2)-release

Disabling the pseudo console by setting MSYS=disable_pcon avoids the issue.

Terminal/shell

mintty 3.8.3 (Git Bash), bash 5.3.15

Commands that trigger the issue

In a Git Bash (mintty) window, in a repository with a branch named `foobar`:


# Start and put to the backround a native Windows process that itself keeps a second native process alive
cmd //c 'C:\Windows\System32\waitfor.exe /t 60 zzz' &

# Attempt to use tab-completion with a git command, e.g:
git switch f<TAB>


Once the backgrounded command finishes (or is killed) the problem disappears.

Expected behaviour

Pressing tab completes the branch name:

git switch foobar

Actual behaviour

The completion is drawn about 64 columns to the right of where the cursor should be:

$ git switch f                                                                oobar

A mintty output log (mintty -l /tmp/mintty.log -e bash -il) shows that readline emits
only oobar; the displacement comes from cursor-forward sequences injected between the
typed text and the completion:

git switch f^[[12C^[[12C^[[12C^[[12C^[[12C^[[4Coobar

Repository

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions