pybind / pybind11

Seamless operability between C++11 and Python

Home Page:https://pybind11.readthedocs.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[BUG]: memory leak

dwpeng opened this issue · comments

Required prerequisites

What version (or hash if on master) of pybind11 are you using?

2.10.3-1

Problem description

When I use valgrind to run memory check, I found there have some memory leak.

system info

Linux

// cat /proc/version
Linux version 5.15.146.1-microsoft-standard-WSL2 (root@65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Jan 11 04:09:03 UTC 2024

c++

// c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/12/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 12.2.0-14' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-12-bTRWOB/gcc-12-12.2.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-12-bTRWOB/gcc-12-12.2.0/debian/tmp-gcn/usr --enable-offload-defaulted --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.0 (Debian 12.2.0-14) 

Python

Python 3.11.7 (main, Dec 28 2023, 10:30:26) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Source Code

#include <pybind11/pybind11.h>


int add(int i, int j) {
    return i + j;
}

PYBIND11_MODULE(example, m) {
    m.doc() = "pybind11 example plugin";
    m.def("add", &add, "A function which adds two numbers");
}

complie

c++ -O3 -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) main.cc -o example$(python3-config --extension-suffix)

test python code

# test.py
import example

print(example.add(1, 2))

valgrind command

valgrind --leak-check=full --leak-check=full --show-leak-kinds=all --log-file=./1.log --track-origins=yes python test.py

Valgrind output

1.log
==394287== Memcheck, a memory error detector
==394287== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==394287== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==394287== Command: python test.py
==394287== Parent PID: 325632
==394287== 
==394287== 
==394287== HEAP SUMMARY:
==394287==     in use at exit: 487,069 bytes in 33 blocks
==394287==   total heap usage: 1,116 allocs, 1,083 frees, 1,620,014 bytes allocated
==394287== 
==394287== 8 bytes in 1 blocks are still reachable in loss record 1 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4010C5D: malloc (rtld-malloc.h:56)
==394287==    by 0x4010C5D: allocate_dtv_entry (dl-tls.c:684)
==394287==    by 0x4010C5D: allocate_and_init (dl-tls.c:709)
==394287==    by 0x4010C5D: tls_get_addr_tail (dl-tls.c:907)
==394287==    by 0x4014207: __tls_get_addr (tls_get_addr.S:55)
==394287==    by 0x59CCC68: pybind11::handle::inc_ref() const & (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59D173E: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287== 
==394287== 8 bytes in 1 blocks are still reachable in loss record 2 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D1859: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287==    by 0x4ACF100: import_find_and_load (import.c:1748)
==394287==    by 0x4ACF100: PyImport_ImportModuleLevelObject (import.c:1847)
==394287==    by 0x4956308: import_name (ceval.c:7424)
==394287==    by 0x4956308: _PyEval_EvalFrameDefault (ceval.c:3946)
==394287== 
==394287== 8 bytes in 1 blocks are still reachable in loss record 3 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4AFA77D: PyThread_tss_alloc (thread.c:145)
==394287==    by 0x59D1982: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287==    by 0x4ACF100: import_find_and_load (import.c:1748)
==394287==    by 0x4ACF100: PyImport_ImportModuleLevelObject (import.c:1847)
==394287== 
==394287== 8 bytes in 1 blocks are still reachable in loss record 4 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D4149: pybind11::detail::get_local_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59DA5CC: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x49F7CE2: cfunction_call (methodobject.c:542)
==394287==    by 0x49A961C: _PyObject_MakeTpCall (call.c:214)
==394287==    by 0x494E9C2: _PyEval_EvalFrameDefault (ceval.c:4769)
==394287==    by 0x4AA18E3: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA18E3: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x4AA18E3: PyEval_EvalCode (ceval.c:1148)
==394287==    by 0x4AE9908: run_eval_code_obj (pythonrun.c:1710)
==394287==    by 0x4AE9908: run_mod (pythonrun.c:1731)
==394287==    by 0x4AEB199: pyrun_file (pythonrun.c:1626)
==394287==    by 0x4AEB199: _PyRun_SimpleFileObject (pythonrun.c:440)
==394287==    by 0x4AEB80B: _PyRun_AnyFileObject (pythonrun.c:79)
==394287==    by 0x4B0AC5F: pymain_run_file_obj (main.c:360)
==394287==    by 0x4B0AC5F: pymain_run_file (main.c:379)
==394287==    by 0x4B0AC5F: pymain_run_python (main.c:601)
==394287==    by 0x4B0AC5F: Py_RunMain (main.c:680)
==394287==    by 0x4B0B216: pymain_main (main.c:710)
==394287==    by 0x4B0B216: Py_BytesMain (main.c:734)
==394287== 
==394287== 8 bytes in 1 blocks are still reachable in loss record 5 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4AFA77D: PyThread_tss_alloc (thread.c:145)
==394287==    by 0x59D4158: pybind11::detail::get_local_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59DA5CC: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x49F7CE2: cfunction_call (methodobject.c:542)
==394287==    by 0x49A961C: _PyObject_MakeTpCall (call.c:214)
==394287==    by 0x494E9C2: _PyEval_EvalFrameDefault (ceval.c:4769)
==394287==    by 0x4AA18E3: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA18E3: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x4AA18E3: PyEval_EvalCode (ceval.c:1148)
==394287==    by 0x4AE9908: run_eval_code_obj (pythonrun.c:1710)
==394287==    by 0x4AE9908: run_mod (pythonrun.c:1731)
==394287==    by 0x4AEB199: pyrun_file (pythonrun.c:1626)
==394287==    by 0x4AEB199: _PyRun_SimpleFileObject (pythonrun.c:440)
==394287==    by 0x4AEB80B: _PyRun_AnyFileObject (pythonrun.c:79)
==394287==    by 0x4B0AC5F: pymain_run_file_obj (main.c:360)
==394287==    by 0x4B0AC5F: pymain_run_file (main.c:379)
==394287==    by 0x4B0AC5F: pymain_run_python (main.c:601)
==394287==    by 0x4B0AC5F: Py_RunMain (main.c:680)
==394287== 
==394287== 16 bytes in 1 blocks are still reachable in loss record 6 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D1AA0: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287==    by 0x4ACF100: import_find_and_load (import.c:1748)
==394287==    by 0x4ACF100: PyImport_ImportModuleLevelObject (import.c:1847)
==394287==    by 0x4956308: import_name (ceval.c:7424)
==394287==    by 0x4956308: _PyEval_EvalFrameDefault (ceval.c:3946)
==394287== 
==394287== 56 bytes in 1 blocks are still reachable in loss record 7 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D3ECD: std::__detail::_Map_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>, true>::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59D4104: pybind11::detail::get_local_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59DA5CC: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x49F7CE2: cfunction_call (methodobject.c:542)
==394287==    by 0x49A961C: _PyObject_MakeTpCall (call.c:214)
==394287==    by 0x494E9C2: _PyEval_EvalFrameDefault (ceval.c:4769)
==394287==    by 0x4AA18E3: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA18E3: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x4AA18E3: PyEval_EvalCode (ceval.c:1148)
==394287==    by 0x4AE9908: run_eval_code_obj (pythonrun.c:1710)
==394287==    by 0x4AE9908: run_mod (pythonrun.c:1731)
==394287==    by 0x4AEB199: pyrun_file (pythonrun.c:1626)
==394287==    by 0x4AEB199: _PyRun_SimpleFileObject (pythonrun.c:440)
==394287==    by 0x4AEB80B: _PyRun_AnyFileObject (pythonrun.c:79)
==394287==    by 0x4B0AC5F: pymain_run_file_obj (main.c:360)
==394287==    by 0x4B0AC5F: pymain_run_file (main.c:379)
==394287==    by 0x4B0AC5F: pymain_run_python (main.c:601)
==394287==    by 0x4B0AC5F: Py_RunMain (main.c:680)
==394287== 
==394287== 58 bytes in 1 blocks are still reachable in loss record 8 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x402369A: malloc (rtld-malloc.h:56)
==394287==    by 0x402369A: strdup (strdup.c:42)
==394287==    by 0x4007E6D: _dl_map_object (dl-load.c:2205)
==394287==    by 0x400B884: dl_open_worker_begin (dl-open.c:534)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287==    by 0x4E99F26: _dlerror_run (dlerror.c:138)
==394287== 
==394287== 58 bytes in 1 blocks are still reachable in loss record 9 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x400ADC8: malloc (rtld-malloc.h:56)
==394287==    by 0x400ADC8: _dl_new_object (dl-object.c:199)
==394287==    by 0x400651E: _dl_map_object_from_fd (dl-load.c:1063)
==394287==    by 0x4007EF4: _dl_map_object (dl-load.c:2272)
==394287==    by 0x400B884: dl_open_worker_begin (dl-open.c:534)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287== 
==394287== 72 bytes in 1 blocks are still reachable in loss record 10 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D4099: pybind11::detail::get_local_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59DA5CC: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x49F7CE2: cfunction_call (methodobject.c:542)
==394287==    by 0x49A961C: _PyObject_MakeTpCall (call.c:214)
==394287==    by 0x494E9C2: _PyEval_EvalFrameDefault (ceval.c:4769)
==394287==    by 0x4AA18E3: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA18E3: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x4AA18E3: PyEval_EvalCode (ceval.c:1148)
==394287==    by 0x4AE9908: run_eval_code_obj (pythonrun.c:1710)
==394287==    by 0x4AE9908: run_mod (pythonrun.c:1731)
==394287==    by 0x4AEB199: pyrun_file (pythonrun.c:1626)
==394287==    by 0x4AEB199: _PyRun_SimpleFileObject (pythonrun.c:440)
==394287==    by 0x4AEB80B: _PyRun_AnyFileObject (pythonrun.c:79)
==394287==    by 0x4B0AC5F: pymain_run_file_obj (main.c:360)
==394287==    by 0x4B0AC5F: pymain_run_file (main.c:379)
==394287==    by 0x4B0AC5F: pymain_run_python (main.c:601)
==394287==    by 0x4B0AC5F: Py_RunMain (main.c:680)
==394287==    by 0x4B0B216: pymain_main (main.c:710)
==394287==    by 0x4B0B216: Py_BytesMain (main.c:734)
==394287== 
==394287== 73 bytes in 2 blocks are still reachable in loss record 11 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x402369A: malloc (rtld-malloc.h:56)
==394287==    by 0x402369A: strdup (strdup.c:42)
==394287==    by 0x4013284: _dl_load_cache_lookup (dl-cache.c:525)
==394287==    by 0x4008012: _dl_map_object (dl-load.c:2139)
==394287==    by 0x4002280: openaux (dl-deps.c:64)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x40025E9: _dl_map_object_deps (dl-deps.c:232)
==394287==    by 0x400B8EC: dl_open_worker_begin (dl-open.c:592)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287== 
==394287== 73 bytes in 2 blocks are still reachable in loss record 12 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x400ADC8: malloc (rtld-malloc.h:56)
==394287==    by 0x400ADC8: _dl_new_object (dl-object.c:199)
==394287==    by 0x400651E: _dl_map_object_from_fd (dl-load.c:1063)
==394287==    by 0x4007EF4: _dl_map_object (dl-load.c:2272)
==394287==    by 0x4002280: openaux (dl-deps.c:64)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x40025E9: _dl_map_object_deps (dl-deps.c:232)
==394287==    by 0x400B8EC: dl_open_worker_begin (dl-open.c:592)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287== 
==394287== 104 bytes in 1 blocks are still reachable in loss record 13 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D3CF9: std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_rehash(unsigned long, unsigned long const&) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59D3F9C: std::__detail::_Map_base<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, void*> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true>, true>::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59D4104: pybind11::detail::get_local_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59DA5CC: pybind11::cpp_function::dispatcher(_object*, _object*, _object*) (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x49F7CE2: cfunction_call (methodobject.c:542)
==394287==    by 0x49A961C: _PyObject_MakeTpCall (call.c:214)
==394287==    by 0x494E9C2: _PyEval_EvalFrameDefault (ceval.c:4769)
==394287==    by 0x4AA18E3: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA18E3: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x4AA18E3: PyEval_EvalCode (ceval.c:1148)
==394287==    by 0x4AE9908: run_eval_code_obj (pythonrun.c:1710)
==394287==    by 0x4AE9908: run_mod (pythonrun.c:1731)
==394287==    by 0x4AEB199: pyrun_file (pythonrun.c:1626)
==394287==    by 0x4AEB199: _PyRun_SimpleFileObject (pythonrun.c:440)
==394287==    by 0x4AEB80B: _PyRun_AnyFileObject (pythonrun.c:79)
==394287== 
==394287== 472 bytes in 1 blocks are still reachable in loss record 14 of 28
==394287==    at 0x4840F2F: operator new(unsigned long) (vg_replace_malloc.c:422)
==394287==    by 0x59D1874: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287==    by 0x4ACF100: import_find_and_load (import.c:1748)
==394287==    by 0x4ACF100: PyImport_ImportModuleLevelObject (import.c:1847)
==394287==    by 0x4956308: import_name (ceval.c:7424)
==394287==    by 0x4956308: _PyEval_EvalFrameDefault (ceval.c:3946)
==394287== 
==394287== 768 bytes in 1 blocks are still reachable in loss record 15 of 28
==394287==    at 0x48406C4: malloc (vg_replace_malloc.c:380)
==394287==    by 0x4A00756: new_arena (obmalloc.c:1610)
==394287==    by 0x4A00756: allocate_from_new_pool (obmalloc.c:1824)
==394287==    by 0x4A00884: pymalloc_alloc (obmalloc.c:1988)
==394287==    by 0x4A00884: _PyObject_Malloc (obmalloc.c:1998)
==394287==    by 0x4B0DC91: gc_alloc (gcmodule.c:2283)
==394287==    by 0x4B0DC91: _PyObject_GC_New (gcmodule.c:2298)
==394287==    by 0x49D4338: PyList_New (listobject.c:179)
==394287==    by 0x4B0D5A2: _PyGC_Init (gcmodule.c:164)
==394287==    by 0x4AE1CD7: pycore_interp_init (pylifecycle.c:835)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287==    by 0x4B0B200: pymain_main (main.c:701)
==394287==    by 0x4B0B200: Py_BytesMain (main.c:734)
==394287==    by 0x4E3C249: (below main) (libc_start_call_main.h:58)
==394287== 
==394287== 768 bytes in 1 blocks are still reachable in loss record 16 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x49E61C6: new_keys_object (dictobject.c:632)
==394287==    by 0x49E6256: dictresize (dictobject.c:1429)
==394287==    by 0x49EC4C7: insertion_resize (dictobject.c:1183)
==394287==    by 0x49EC4C7: PyDict_SetDefault (dictobject.c:3338)
==394287==    by 0x4A135B6: type_add_method (typeobject.c:5686)
==394287==    by 0x4A135B6: type_add_methods (typeobject.c:5712)
==394287==    by 0x4A135B6: type_ready_fill_dict (typeobject.c:6188)
==394287==    by 0x4A135B6: type_ready (typeobject.c:6467)
==394287==    by 0x4A135B6: PyType_Ready (typeobject.c:6506)
==394287==    by 0x49FAF80: _PyTypes_InitTypes (object.c:1986)
==394287==    by 0x4AE1D13: pycore_init_types (pylifecycle.c:704)
==394287==    by 0x4AE1D13: pycore_interp_init (pylifecycle.c:845)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287==    by 0x4B0B200: pymain_main (main.c:701)
==394287==    by 0x4B0B200: Py_BytesMain (main.c:734)
==394287== 
==394287== 768 bytes in 1 blocks are still reachable in loss record 17 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x49E61C6: new_keys_object (dictobject.c:632)
==394287==    by 0x49E6256: dictresize (dictobject.c:1429)
==394287==    by 0x49EC4C7: insertion_resize (dictobject.c:1183)
==394287==    by 0x49EC4C7: PyDict_SetDefault (dictobject.c:3338)
==394287==    by 0x4A13735: type_add_members (typeobject.c:5734)
==394287==    by 0x4A13735: type_ready_fill_dict (typeobject.c:6191)
==394287==    by 0x4A13735: type_ready (typeobject.c:6467)
==394287==    by 0x4A13735: PyType_Ready (typeobject.c:6506)
==394287==    by 0x49FAF80: _PyTypes_InitTypes (object.c:1986)
==394287==    by 0x4AE1D13: pycore_init_types (pylifecycle.c:704)
==394287==    by 0x4AE1D13: pycore_interp_init (pylifecycle.c:845)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287==    by 0x4B0B200: pymain_main (main.c:701)
==394287==    by 0x4B0B200: Py_BytesMain (main.c:734)
==394287== 
==394287== 960 bytes in 1 blocks are still reachable in loss record 18 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x4A100CB: _PyType_AllocNoTrack (typeobject.c:1124)
==394287==    by 0x4A100CB: PyType_GenericAlloc (typeobject.c:1148)
==394287==    by 0x59D1AE9: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287== 
==394287== 960 bytes in 1 blocks are still reachable in loss record 19 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x4A100CB: _PyType_AllocNoTrack (typeobject.c:1124)
==394287==    by 0x4A100CB: PyType_GenericAlloc (typeobject.c:1148)
==394287==    by 0x59D1BE4: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287== 
==394287== 960 bytes in 1 blocks are still reachable in loss record 20 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x4A100CB: _PyType_AllocNoTrack (typeobject.c:1124)
==394287==    by 0x4A100CB: PyType_GenericAlloc (typeobject.c:1148)
==394287==    by 0x59D1CF5: pybind11::detail::get_internals() (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x59CBB28: PyInit_example (in /home/dwp/c/seqio/example.cpython-311-x86_64-linux-gnu.so)
==394287==    by 0x4AD02DD: _PyImport_LoadDynamicModuleWithSpec (importdl.c:169)
==394287==    by 0x4ACC2E4: _imp_create_dynamic_impl (import.c:2397)
==394287==    by 0x4ACC2E4: _imp_create_dynamic (import.c.h:446)
==394287==    by 0x49F84A5: cfunction_vectorcall_FASTCALL (methodobject.c:427)
==394287==    by 0x494F107: do_call_core (ceval.c:7352)
==394287==    by 0x494F107: _PyEval_EvalFrameDefault (ceval.c:5376)
==394287==    by 0x4AA1A3F: _PyEval_EvalFrame (pycore_ceval.h:73)
==394287==    by 0x4AA1A3F: _PyEval_Vector (ceval.c:6434)
==394287==    by 0x49A9E6E: _PyObject_VectorcallTstate (pycore_call.h:92)
==394287==    by 0x49A9E6E: object_vacall (call.c:819)
==394287==    by 0x49AA086: PyObject_CallMethodObjArgs (call.c:879)
==394287== 
==394287== 1,274 bytes in 1 blocks are still reachable in loss record 21 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x400AAE9: calloc (rtld-malloc.h:44)
==394287==    by 0x400AAE9: _dl_new_object (dl-object.c:92)
==394287==    by 0x400651E: _dl_map_object_from_fd (dl-load.c:1063)
==394287==    by 0x4007EF4: _dl_map_object (dl-load.c:2272)
==394287==    by 0x400B884: dl_open_worker_begin (dl-open.c:534)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287== 
==394287== 2,461 bytes in 2 blocks are still reachable in loss record 22 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x400AAE9: calloc (rtld-malloc.h:44)
==394287==    by 0x400AAE9: _dl_new_object (dl-object.c:92)
==394287==    by 0x400651E: _dl_map_object_from_fd (dl-load.c:1063)
==394287==    by 0x4007EF4: _dl_map_object (dl-load.c:2272)
==394287==    by 0x4002280: openaux (dl-deps.c:64)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x40025E9: _dl_map_object_deps (dl-deps.c:232)
==394287==    by 0x400B8EC: dl_open_worker_begin (dl-open.c:592)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287== 
==394287== 2,520 bytes in 3 blocks are still reachable in loss record 23 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x40125D3: calloc (rtld-malloc.h:44)
==394287==    by 0x40125D3: _dl_check_map_versions (dl-version.c:280)
==394287==    by 0x400B935: dl_open_worker_begin (dl-open.c:600)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287==    by 0x4E99F26: _dlerror_run (dlerror.c:138)
==394287==    by 0x4E9A4E8: dlopen_implementation (dlopen.c:71)
==394287==    by 0x4E9A4E8: dlopen@@GLIBC_2.34 (dlopen.c:81)
==394287== 
==394287== 4,064 bytes in 1 blocks are still reachable in loss record 24 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x400959E: calloc (rtld-malloc.h:44)
==394287==    by 0x400959E: do_lookup_unique (dl-lookup.c:272)
==394287==    by 0x400959E: do_lookup_x (dl-lookup.c:488)
==394287==    by 0x40098C7: _dl_lookup_symbol_x (dl-lookup.c:776)
==394287==    by 0x400E290: resolve_map (dl-reloc.c:190)
==394287==    by 0x400E290: elf_machine_rela (dl-machine.h:271)
==394287==    by 0x400E290: elf_dynamic_do_Rela (do-rel.h:147)
==394287==    by 0x400E290: _dl_relocate_object (dl-reloc.c:301)
==394287==    by 0x400BA89: dl_open_worker_begin (dl-open.c:702)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B045: dl_open_worker (dl-open.c:782)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287== 
==394287== 4,624 bytes in 1 blocks are still reachable in loss record 25 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:2003)
==394287==    by 0x4A00897: _PyObject_Malloc (obmalloc.c:1996)
==394287==    by 0x49E61C6: new_keys_object (dictobject.c:632)
==394287==    by 0x49E6256: dictresize (dictobject.c:1429)
==394287==    by 0x49E9D2A: insertion_resize (dictobject.c:1183)
==394287==    by 0x49E9D2A: insertdict (dictobject.c:1248)
==394287==    by 0x4A0D09B: add_subclass (typeobject.c:6545)
==394287==    by 0x4A13FD2: type_ready_add_subclasses (typeobject.c:6345)
==394287==    by 0x4A13FD2: type_ready (typeobject.c:6476)
==394287==    by 0x4A13FD2: PyType_Ready (typeobject.c:6506)
==394287==    by 0x49FAF80: _PyTypes_InitTypes (object.c:1986)
==394287==    by 0x4AE1D13: pycore_init_types (pylifecycle.c:704)
==394287==    by 0x4AE1D13: pycore_interp_init (pylifecycle.c:845)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287== 
==394287== 72,704 bytes in 1 blocks are still reachable in loss record 26 of 28
==394287==    at 0x48407B4: malloc (vg_replace_malloc.c:381)
==394287==    by 0x5A947B9: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30)
==394287==    by 0x40048BD: call_init (dl-init.c:90)
==394287==    by 0x40048BD: call_init (dl-init.c:27)
==394287==    by 0x40049A3: _dl_init (dl-init.c:137)
==394287==    by 0x4F64023: _dl_catch_exception (dl-error-skeleton.c:182)
==394287==    by 0x400B09D: dl_open_worker (dl-open.c:808)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x400B437: _dl_open (dl-open.c:884)
==394287==    by 0x4E9A437: dlopen_doit (dlopen.c:56)
==394287==    by 0x4F63FC9: _dl_catch_exception (dl-error-skeleton.c:208)
==394287==    by 0x4F6407E: _dl_catch_error (dl-error-skeleton.c:227)
==394287==    by 0x4E99F26: _dlerror_run (dlerror.c:138)
==394287== 
==394287== 131,072 bytes in 1 blocks are still reachable in loss record 27 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x49FFC5A: arena_map_get (obmalloc.c:1471)
==394287==    by 0x49FFC5A: arena_map_mark_used (obmalloc.c:1514)
==394287==    by 0x4A00558: new_arena (obmalloc.c:1644)
==394287==    by 0x4A00558: allocate_from_new_pool (obmalloc.c:1824)
==394287==    by 0x4A00884: pymalloc_alloc (obmalloc.c:1988)
==394287==    by 0x4A00884: _PyObject_Malloc (obmalloc.c:1998)
==394287==    by 0x4B0DC91: gc_alloc (gcmodule.c:2283)
==394287==    by 0x4B0DC91: _PyObject_GC_New (gcmodule.c:2298)
==394287==    by 0x49D4338: PyList_New (listobject.c:179)
==394287==    by 0x4B0D5A2: _PyGC_Init (gcmodule.c:164)
==394287==    by 0x4AE1CD7: pycore_interp_init (pylifecycle.c:835)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287==    by 0x4B0B200: pymain_main (main.c:701)
==394287==    by 0x4B0B200: Py_BytesMain (main.c:734)
==394287== 
==394287== 262,144 bytes in 1 blocks are still reachable in loss record 28 of 28
==394287==    at 0x48455EF: calloc (vg_replace_malloc.c:1328)
==394287==    by 0x49FFC92: arena_map_get (obmalloc.c:1459)
==394287==    by 0x49FFC92: arena_map_mark_used (obmalloc.c:1514)
==394287==    by 0x4A00558: new_arena (obmalloc.c:1644)
==394287==    by 0x4A00558: allocate_from_new_pool (obmalloc.c:1824)
==394287==    by 0x4A00884: pymalloc_alloc (obmalloc.c:1988)
==394287==    by 0x4A00884: _PyObject_Malloc (obmalloc.c:1998)
==394287==    by 0x4B0DC91: gc_alloc (gcmodule.c:2283)
==394287==    by 0x4B0DC91: _PyObject_GC_New (gcmodule.c:2298)
==394287==    by 0x49D4338: PyList_New (listobject.c:179)
==394287==    by 0x4B0D5A2: _PyGC_Init (gcmodule.c:164)
==394287==    by 0x4AE1CD7: pycore_interp_init (pylifecycle.c:835)
==394287==    by 0x4AE4303: pyinit_config (pylifecycle.c:901)
==394287==    by 0x4AE4303: pyinit_core.constprop.0 (pylifecycle.c:1064)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1254)
==394287==    by 0x4AE4420: Py_InitializeFromConfig (pylifecycle.c:1239)
==394287==    by 0x4B09F3A: pymain_init (main.c:67)
==394287==    by 0x4B0B200: pymain_main (main.c:701)
==394287==    by 0x4B0B200: Py_BytesMain (main.c:734)
==394287== 
==394287== LEAK SUMMARY:
==394287==    definitely lost: 0 bytes in 0 blocks
==394287==    indirectly lost: 0 bytes in 0 blocks
==394287==      possibly lost: 0 bytes in 0 blocks
==394287==    still reachable: 487,069 bytes in 33 blocks
==394287==         suppressed: 0 bytes in 0 blocks
==394287== 
==394287== For lists of detected and suppressed errors, rerun with: -s
==394287== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Is this a regression? Put the last known working version here if it is.

No response

use valgrind to check pure python code, the same case happened again. maybe it is not pybind11's bug.