From a3b349f7fe9e6f8c85c6ae183581c0c1920d5982 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 29 Jun 2026 21:20:05 +0300 Subject: [PATCH] gh-144067: Document terminal leak when initscr() follows setupterm() The curses library keeps a single current terminal: calling initscr() or newterm() after setupterm() abandons the terminal that setupterm() allocated without freeing it. This cannot be fixed safely in code (freeing the terminal would break the capsule API and pending terminfo queries), so document the behavior, with a cross-reference from initscr() and newterm(). Co-Authored-By: Claude Opus 4.8 --- Doc/library/curses.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Doc/library/curses.rst b/Doc/library/curses.rst index b3341fb8629f4ca..7b0240d6c8fc1c8 100644 --- a/Doc/library/curses.rst +++ b/Doc/library/curses.rst @@ -76,6 +76,8 @@ Initialization and termination Initialize the library. Return a :ref:`window ` object which represents the whole screen. + See :func:`setupterm` for a caveat about calling it before this function. + .. note:: If there is an error opening the terminal, the underlying curses library may @@ -106,6 +108,8 @@ Initialization and termination The new screen becomes the current one. Use :func:`set_term` to switch between screens. + See :func:`setupterm` for a caveat about calling it before this function. + .. versionadded:: next .. function:: new_prescr() @@ -957,6 +961,13 @@ Terminfo database terminfo database entry could not be read. If the terminal has already been initialized, this function has no effect. + .. note:: + + Calling :func:`initscr` or :func:`newterm` after :func:`setupterm` + leaks the terminal that :func:`setupterm` allocated: + the curses library keeps only a single current terminal + and does not free the previously allocated one. + .. function:: tigetflag(capname) Return the value of the Boolean capability corresponding to the terminfo