Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test runner should try to increase stack size if it is too low #71464

Closed
RohitMediratta mannequin opened this issue Jun 9, 2016 · 9 comments
Closed

Test runner should try to increase stack size if it is too low #71464

RohitMediratta mannequin opened this issue Jun 9, 2016 · 9 comments
Labels
3.11 only security fixes tests Tests in the Lib/test dir type-feature A feature request or enhancement

Comments

@RohitMediratta
Copy link
Mannequin

RohitMediratta mannequin commented Jun 9, 2016

BPO 27277
Nosy @vstinner, @berkerpeksag, @serhiy-storchaka, @JelleZijlstra, @stratakis, @iritkatriel
Superseder
  • bpo-44348: test_exceptions.ExceptionTests.test_recursion_in_except_handler stack overflow on Windows debug builds
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = <Date 2021-09-07.16:45:07.297>
    created_at = <Date 2016-06-09.07:28:55.046>
    labels = ['type-feature', 'tests', '3.11']
    title = 'Test runner should try to increase stack size if it is too low'
    updated_at = <Date 2021-09-07.16:45:07.296>
    user = 'https://bugs.python.org/RohitMediratta'

    bugs.python.org fields:

    activity = <Date 2021-09-07.16:45:07.296>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2021-09-07.16:45:07.297>
    closer = 'vstinner'
    components = ['Tests']
    creation = <Date 2016-06-09.07:28:55.046>
    creator = 'Rohit Mediratta'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 27277
    keywords = []
    message_count = 9.0
    messages = ['267965', '268097', '268102', '268263', '268330', '268332', '315833', '315834', '401306']
    nosy_count = 7.0
    nosy_names = ['vstinner', 'berker.peksag', 'serhiy.storchaka', 'JelleZijlstra', 'Rohit Mediratta', 'cstratak', 'iritkatriel']
    pr_nums = []
    priority = 'normal'
    resolution = 'duplicate'
    stage = 'resolved'
    status = 'closed'
    superseder = '44348'
    type = 'enhancement'
    url = 'https://bugs.python.org/issue27277'
    versions = ['Python 3.11']

    @RohitMediratta
    Copy link
    Mannequin Author

    RohitMediratta mannequin commented Jun 9, 2016

    Fresh clone and running test_exceptions testcase caught a Seg fault.
    This was being run on a Centos VM.

    [/loc/rom/pyd/cpython] $ ./python
    Python 3.6.0a1+ (default:12d939477b4f, Jun 7 2016, 17:32:31)
    [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux
    Type "help", "copyright", "credits" or "license" for more information.

    >>

    [/loc/rom/pyd/cpython] $ ./python ../coveragepy/ run --pylib Lib/test/regrtest.py test_exceptions
    Run tests sequentially
    0:00:00 [1/1] test_exceptions
    Fatal Python error: Segmentation fault

    Current thread 0x00007fc7324d1700 (most recent call first):
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    ...
    Segmentation fault

    @RohitMediratta RohitMediratta mannequin added type-crash A hard crash of the interpreter, possibly with a core dump interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Jun 9, 2016
    @SilentGhost SilentGhost mannequin added the tests Tests in the Lib/test dir label Jun 9, 2016
    @RohitMediratta
    Copy link
    Mannequin Author

    RohitMediratta mannequin commented Jun 10, 2016

    Debugged with gdb and found the following

    (gdb) run ../coveragepy/ run --pylib Lib/test/regrtest.py test_exceptions
    Starting program: /local/romedira/pydev/cpython/python ../coveragepy/ run --pylib Lib/test/regrtest.py test_exceptions
    [Thread debugging using libthread_db enabled]
    Run tests sequentially
    0:00:00 [1/1] test_exceptions

    Program received signal SIGSEGV, Segmentation fault.
    0x00000000005bf1e8 in PyEval_EvalFrameEx (f=Cannot access memory at address 0x7fffff7fd438
    ) at Python/ceval.c:798
    798 {
    Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6_3.6.x86_64 keyutils-libs-1.4-4.el6.x86_64 krb5-libs-1.9-33.el6_3.3.x86_64 libcom_err-1.41.12-12.el6.x86_64 libselinux-2.0.94-5.3.el6.x86_64 openssl-1.0.1e-16.el6_5.1.x86_64 zlib-1.2.3-29.el6.x86_64

    @JelleZijlstra
    Copy link
    Member

    This test asserts that indefinite recursion causes a RecursionError, but such recursion can instead segfault if the amount of stack space available is less than Python's recursion limit (sys.getrecursionlimit()).

    Are you using any unusual settings for the recursion limit? Perhaps the solution here is to have CPython use a lower default recursion limit on your platform.

    @RohitMediratta
    Copy link
    Mannequin Author

    RohitMediratta mannequin commented Jun 11, 2016

    It's set to 1000, I didnt change during install, so it's likely set to the default value.

    >>> import sys
    >>> sys.getrecursionlimit()
    1000

    I also have a lot of memory free (87G) to run scripts (should be able to handle without running into issues)

    [/loc/rom/pyd/cpython] $ free -m
    total used free shared buffers cached
    Mem: 96870 9849 87021 0 716 7512
    -/+ buffers/cache: 1620 95250
    Swap: 0 0 0

    @berkerpeksag
    Copy link
    Member

    Can you please try without coveragepy?

    ./python -m test test_exceptions
    

    @RohitMediratta
    Copy link
    Mannequin Author

    RohitMediratta mannequin commented Jun 12, 2016

    Leads to the same Segfault

    [/loc/rom/pyd/cpython] $ ./python -m test test_exceptions
    Run tests sequentially
    0:00:00 [1/1] test_exceptions
    Fatal Python error: Segmentation fault

    Current thread 0x00007fb466572700 (most recent call first):
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    File "/local/romedira/pydev/cpython/Lib/test/test_exceptions.py", line 490 in f
    ...
    Segmentation fault (core dumped)

    @stratakis
    Copy link
    Mannequin

    stratakis mannequin commented Apr 27, 2018

    This is an issue with the stack size.

    It was encountered recently while building Python 3.6 under CentOS 6 [0] and the way to fix it was to increase the maximum stack size using ulimit e.g. [1]

    [0] https://bugzilla.redhat.com/show_bug.cgi?id=1572150
    [1] https://src.fedoraproject.org/rpms/python3/blob/f26/f/python3.spec#_1132

    @vstinner
    Copy link
    Member

    It was encountered recently while building Python 3.6 under CentOS 6 [0] and the way to fix it was to increase the maximum stack size using ulimit e.g. [1]

    In a perfect world, unit tests should not depend on the environment. So Python may *try* to increase the maximum stack size when running these tests. (If the limit cannot be increased, it's fine.)

    @iritkatriel iritkatriel added 3.11 only security fixes and removed interpreter-core (Objects, Python, Grammar, and Parser dirs) labels Sep 7, 2021
    @iritkatriel iritkatriel changed the title Fatal Python error: Segmentation fault in test_exceptions Test runner should try to increase stack size if it is too low Sep 7, 2021
    @iritkatriel iritkatriel added type-feature A feature request or enhancement and removed type-crash A hard crash of the interpreter, possibly with a core dump labels Sep 7, 2021
    @vstinner
    Copy link
    Member

    vstinner commented Sep 7, 2021

    I just pushed a change to reduce the stack memory usage when deleting a chain of exceptions in bpo-44348. I consider that this issue is a duplicate. If it's not the case, please reopen the issue.

    commit fb30509 (upstream/main, main)
    Author: Victor Stinner <vstinner@python.org>
    Date: Tue Sep 7 15:42:11 2021 +0200

    bpo-44348: BaseException deallocator uses trashcan (GH-28190)
    
    The deallocator function of the BaseException type now uses the
    trashcan mecanism to prevent stack overflow. For example, when a
    RecursionError instance is raised, it can be linked to another
    RecursionError through the __context__ attribute or the __traceback__
    attribute, and then a chain of exceptions is created. When the chain
    is destroyed, nested deallocator function calls can crash with a
    stack overflow if the chain is too long compared to the available
    stack memory.
    

    @vstinner vstinner closed this as completed Sep 7, 2021
    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.11 only security fixes tests Tests in the Lib/test dir type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    4 participants