Skip to content

[New msys2-runtime version] Cygwin: console: Avoid deadlock with app execution aliases #6446

Closed as duplicate

Description

@github-actions
Cygwin: console: Avoid deadlock with app execution aliases

Calling `winget.exe` through its app execution alias from an interactive
MSYS2 shell can leave the shell hanging after `winget.exe` exits. This
affects all app execution aliases, not only `winget.exe`.

App execution alias handling was introduced in 0631c6644e (Cygwin: Treat
Windows Store's "app execution aliases" as symbolic links, 2021-03-22),
and 6c3d26961d (Cygwin: termios: Handle app execution alias in
is_console_app(), 2025-12-10) taught `is_console_app()` to follow
aliases using another `path_conv`, which allocates cygheap memory.

618eb90fc2 (Cygwin: console: Fix undesired mode change at exit of
non-cygwin apps, 2026-09-19) added a second `is_console_app()` call from
`wait_for_resume_if_necessary()`. Unfortunately, at that point,
`child_info_spawn::worker()` already holds the non-recursive
`cygheap_protect`, so following an alias tries to acquire the same lock
recursively and deadlocks.

Let's avoid running `is_console_app()` under that lock by instead
classifying the executable _once_, in `spawn_worker::setup()`, before
acquiring the cygheap lock, then cache and reuse the result for both PTY
setup and the post-resume wait.

Addresses: https://github.com/msys2/msys2-runtime/issues/372
Fixes: 618eb90fc2 (Cygwin: console: Fix undesired mode change at exit
 of non-cygwin apps, 2026-09-19)
Signed-off-by: Christoph Reiter <reiter.christoph@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>

msys2/msys2-runtime@3ea87a5

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions