Skip to content

[gh-117657] _Py_MergeZeroLocalRefcount isn't loading ob_ref_shared with strong enough semantics - #118111

Merged
DinoV merged 1 commit into
python:mainfrom
DinoV:nogil_tsan_decref
Apr 19, 2024
Merged

[gh-117657] _Py_MergeZeroLocalRefcount isn't loading ob_ref_shared with strong enough semantics#118111
DinoV merged 1 commit into
python:mainfrom
DinoV:nogil_tsan_decref

Conversation

@DinoV

@DinoVDinoV commented Apr 19, 2024

Copy link
Copy Markdown
Contributor

In the nogil-integration branch there's some intermittent TSAN warnings like these:

https://gist.github.com/DinoV/52b7131cb149b9ebb2e965970c4ae9e8

It looks like we're racing on the loading of ob_ref_shared in _Py_MergeZeroLocalRefcount because we're doing a relaxed load, leading to the object potentially being freed while another thread holds a reference to it. This is occurring because with a lock-free read from the inline values there's no other synchronization points with the thread which owns the object.

This just changes the read to be acquire.

@mpage

Copy link
Copy Markdown
Contributor

This looks right to me but it'd be good to have @colesbury take a look as well.

@mpage
mpage requested a review from colesburyApril 19, 2024 19:36
@DinoV
DinoV merged commit b45af00 into python:mainApr 19, 2024
@DinoV
DinoV deleted the nogil_tsan_decref branch May 31, 2024 18:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@DinoV@mpage@colesbury