GeezerVison is showing github.com — test_curses reference leak in the Python main branch · Issue #94644 · python/cpython
test_curses reference leak in the Python main branch #94644DescriptionAt commit e925241, test_curses leaks references:
$ ./python -m test test_curses -m test_output_string_embedded_null_chars -u all -R 3:3
(...)
test_curses leaked [4, 4, 4] references, sum=12
I reproduce the issue on Fedora.
Example of failing buildbot: https://buildbot.python.org/all/#/builders/16/builds/244
Before this change, Python doesn't leak references.
Before: make:
gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_cursesmodule.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_cursesmodule.o
gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -DHAVE_NCURSESW=1 -I/usr/include/ncursesw -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_curses_panel.o
After: make:
gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -D_DEFAULT_SOURCE -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_cursesmodule.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_cursesmodule.o
gcc -fPIC -g -Og -Wall -O0 -std=c11 -Werror=implicit-function-declaration -fvisibility=hidden -I./Include/internal -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -I./Include -I. -I/usr/local/include -I/home/vstinner/python/main/Include -I/home/vstinner/python/main -c /home/vstinner/python/main/Modules/_curses_panel.c -o build/temp.linux-x86_64-3.12-pydebug/home/vstinner/python/main/Modules/_curses_panel.o
The commit removes -DHAVE_NCURSESW=1 -I/usr/include/ncursesw options and adds -D_DEFAULT_SOURCE option to the (gcc) build command line of the _curses extension.
cc @tiran @erlend-aasland Activitytiran commented on Jul 7, 2022 HAVE_NCURSESW should be added to pyconfig.h. The pkg-config branch does not define the config value.
The problem may have revealed an old bug in the non-wide curses build. tiran commented on Jul 7, 2022 @kumaraditya303 fixed the reference leak when the curses module is built without ncursesw. I addressed the missing HAVE_NCURSESW in the pkg-config branch. Additional defines and include directories are now coming from pkg-config or env var overrides. vstinner commented on Jul 7, 2022
I addressed the missing HAVE_NCURSESW in the pkg-config branch.
What is this branch? tiran commented on Jul 7, 2022 The TRUE branch in PKG_CHECK_MODULES call:
PKG_CHECK_MODULES([CURSES], [ncursesw], [
AC_DEFINE([HAVE_NCURSESW], [1]) <<<<<<<<<<<<<<<<<<<< this line was missing
have_curses=ncursesw
], [
WITH_SAVE_ENV([
AC_CHECK_LIB([ncursesw], [initscr], [
AC_DEFINE([HAVE_NCURSESW], [1])
have_curses=ncursesw
CURSES_CFLAGS=${CURSES_CFLAGS-""}
CURSES_LIBS=${CURSES_LIBS-"-lncursesw"}
])
])
])
vstinner commented on Jul 7, 2022 At commit b6558d7, the HAVE_NCURSESW macro is now defined as 1 in pyconfig.h:
/* Define to 1 if you have the `ncursesw' library. */
#define HAVE_NCURSESW 1
Thanks for the fix.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|