Skip to content

Conversation

DinoV
Copy link
Contributor

@DinoV DinoV commented Apr 19, 2024

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
Contributor

mpage commented Apr 19, 2024

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

@mpage mpage requested a review from colesbury April 19, 2024 19:36
@DinoV DinoV merged commit b45af00 into python:main Apr 19, 2024
@DinoV DinoV deleted the nogil_tsan_decref branch May 31, 2024 18:22
Sign up for free to 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