Skip to content

pty.spawn deadlock #96522

Description

@zhangyoufu

Bug report

% yes | python3 -c "import pty; pty.spawn(['cat'])"
y
...
y^CTraceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python3.10/pty.py", line 181, in spawn
    _copy(master_fd, master_read, stdin_read)
  File "/usr/lib/python3.10/pty.py", line 161, in _copy
    _writen(master_fd, data)
  File "/usr/lib/python3.10/pty.py", line 127, in _writen
    n = os.write(fd, data)
KeyboardInterrupt

You will see 2048 lines of y due to tty echo, then the output stops and hangs forever.
Both python and cat block on write, waiting each other consume something from pty buffer.

Your environment

Tested on Linux/macOS with CPython 3.10.

Linked PRs

Activity

  1. zhangyoufu commented on Sep 3, 2022

    @zhangyoufu
    ContributorAuthor

    pty._copy did not check whether the destination fd is writable.

  2. ambv commented on Oct 5, 2022

    @ambv
    Contributor

    I can reproduce this with main, and the proposed PR does indeed fix the deadlock.

  3. added 3 commits that reference this issue on May 19, 2023
  4. ambv commented on May 19, 2023

    @ambv
    Contributor

    Fixed in 3.11 and 3.12.

  5. ambv commented on May 19, 2023

    @ambv
    Contributor

    Thanks, @zhangyoufu! ✨ 🍰 ✨

  6. added a commit that references this issue on May 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    type-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions