Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Segmentation fault with Python 3.14.1, 3.13.10: insertdict: Assertion `!_PyDict_HasSplitTable(mp)' failed. #142218

Copy link
Copy link
@emontnemery

Description

@emontnemery
Issue body actions

Bug report

Bug description:

There's a segmentation fault in Python 3.14.1 and 3.13.10 which doesn't happen in the previous point releases.

I'm sorry about the messy reproducer, the issue was noticed in a much larger program and this is what I ended up with after removing all the cruft.

seg_fault_issue_import.py:

import asyncio
import atexit


class OtherClass:
    __slots__ = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'

    def __init__(self):
        pass


def register_async_client_cleanup():

    def cleanup_wrapper():
        loop = asyncio.new_event_loop()
        loop.close()

    atexit.register(cleanup_wrapper)

register_async_client_cleanup()

seg_fault_debug.py:

from enum import StrEnum

from seg_fault_issue_import import OtherClass

class MyClass:

    def __init__(self):
        self.attr = OtherClass()


class MyEnum(StrEnum):
    ATTR = "attr"

mydata = MyClass()
setattr(mydata, MyEnum.ATTR, None)

Running seg_fault_debug.py causes a segmentation fault with Python 3.13.10 and 3.14.1:

$ python3 seg_fault_debug.py
Segmentation fault (core dumped)
Original reproducer

seg_fault_issue_import.py:

import asyncio
import atexit
from dataclasses import dataclass


@dataclass(slots=True)
class CPU:
    """CPU."""

    count: int | None = None
    frequency: float | None = None
    load_average: float | None = None
    per_cpu: list[float] | None = None
    power: float | None = None
    stats: float | None = None
    temperature: float | None = None
    times: float | None = None
    times_percent: float | None = None


def register_async_client_cleanup():

    def cleanup_wrapper():
        loop = asyncio.new_event_loop()
        loop.close()

    atexit.register(cleanup_wrapper)

register_async_client_cleanup()

seg_fault_debug.py:

from dataclasses import dataclass, field
from enum import StrEnum

from seg_fault_issue_import import CPU

@dataclass
class MyDataclass:

    attr: None = field(default_factory=CPU)


class MyEnum(StrEnum):
    ATTR = "attr"

mydata = MyDataclass()
setattr(mydata, MyEnum.ATTR, None)

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixes3.15pre-release feature fixes, bugs and security fixespre-release feature fixes, bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)release-blockertype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
    No fields configured for issues without a type.

    Projects

    Status
    Done
    Show more project fields

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.