Skip to content

nogil segmentation fault on ordered dict operations #125996

Description

@luisggpina

Crash report

What happened?

Hi,

We're a research group focused on testing concurrent runtimes. Our work-in-progress prototype found a segmentation fault on the current nogil build when using concurrent operations on the same ordered dict. The program below shows the crash.

fromthreadingimportBarrier, ThreadimportsysfromcollectionsimportOrderedDictd=OrderedDict({"k1": "v1", "k2": "v2", 1: 2})
deft1(b1):
b1.wait()
try:
d.move_to_end("k1")
except:
Nonedeft2(b1):
b1.wait()
d.clear()
deftest(): globaldbarrier=Barrier(2) threads= [ Thread(target=t1, args=(barrier,)) , Thread(target=t2, args=(barrier,)) ]
d=OrderedDict({"k1": "v1", "k2": "v2", 1: 2})
fortinthreads:
t.start()
fortinthreads:
t.join()
print("Test begin...")
foriinrange(0,1000):
test()
print("Test Done")

We ran this on our build from source configured with ./configure --disable-gil.

Here's some details about the OS, compiler, binutils: Linux version 5.15.0-124-generic (buildd@lcy02-amd64-118) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024

@flypoodles and @overlorde are part of the team, adding them so they get notified about further discussion.

We're happy to provide more details about the crash.

CPython versions tested on:

3.13, 3.14, CPython main branch

Operating systems tested on:

Linux

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

Python 3.14.0a1+ experimental free-threading build (heads/main:c5b99f5c2c5, Oct 25 2024, 17:31:30) [GCC 11.4.0]

Linked PRs

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions