Skip to content

Circular lazy import results in a crash #144727

@ZeroIntensity

Description

@ZeroIntensity

Crash report

What happened?

Not even 3 hours since PEP 810 got merged, we already have a crash!

# a.py
lazy import b

def something():
    b.hello()

something()
# b.py
lazy import a

def hello():
    print(a)

Running a.py will result in the following crash:

Python/gc.c:533: visit_decref: Assertion "!_PyObject_IsFreed(op)" failed
Enable tracemalloc to get the memory block allocation traceback

object address  : 0x7fcfb75797f0
object refcount : 2
object type     : 0x55a7d0ea0140
object type name: dict
object repr     : [1]    38419 segmentation fault (core dumped)  /home/peter/develop/cpython/python a.py

Sometimes an ImportCycleError shows up before the crash as well:

Traceback (most recent call last):
  File "/home/peter/develop/cpython/b.py", line 1, in <module>
    lazy import a
ImportError: deferred import of 'a' raised an exception during resolution

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/peter/develop/cpython/a.py", line 6, in <module>
    something()
    ~~~~~~~~~^^
  File "/home/peter/develop/cpython/a.py", line 4, in something
    b.hello()
    ~~~~~~~^^
  File "/home/peter/develop/cpython/b.py", line 4, in hello
    print(a)
          ^
  File "/home/peter/develop/cpython/a.py", line 6, in <module>
    something()
    ~~~~~~~~~^^
  File "/home/peter/develop/cpython/a.py", line 4, in something
    b.hello()
    ~~~~~~~^^
  File "/home/peter/develop/cpython/b.py", line 4, in hello
    print(a)
          ^
ImportCycleError: cannot import name 'a' (most likely due to a circular import)

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Output from running 'python -VV' on the command line:

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.15new features, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)type-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions