-
-
Notifications
You must be signed in to change notification settings - Fork 31.7k
gh-112075: Make instance attributes stored in inline "dict" thread safe #114742
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
75c4227
to
4ac4f8b
Compare
57327a2
to
0b7b010
Compare
This looks inefficient, we really don't want locks in the fast path for attribute lookup. Rather than putting locks around things, maybe we can revisit the way we handle objects with managed dictionaries to consider free-threading? |
I assume you're referring to the latest unfinished version (as previous one only added a lock for dematerialization which as @colesbury pointed out isn't correct)? If so there aren't actually any locking for lookups in the fast path... There is an read w/ acquire semantics, but on strongly-ordered systems like x64 that's no different than a normal read anyway. It does introduce an incref/decref when reading from the dictionary. Also FWIW I think I don't need the spinning in I think we could get rid of the incref though if we disabled dematerialization in free-threading, but there's still going to be some ref count checks to see if the object is local, and if not to mark it as shared so that we'll free the values via QSBR. I'm not sure that can be avoided. |
I've run into an existing complication with the existing solution I've been trying. The limitation in the byte code generator " Until the last It also occurred to me that we're not just racing with de-materialization of the dict, but we're also racing with someone assigning to So an alternate plan might be:
|
eadcc3e
to
3c3537e
Compare
f896695
to
b5a3231
Compare
🤖 New build scheduled with the buildbot fleet by @colesbury for commit fc7d1a4 🤖 If you want to schedule another build, you need to add the 🔨 test-with-refleak-buildbots label again. |
fc7d1a4
to
4b85255
Compare
Fix issue where critical section isn't released Make _PyObject_TryGetInstanceAttribute return a bool
…issue w/ deleted dict
…y materialized dict Fix duplicate incref Fix comment Remove redundant if check on detach
fac83b7
to
ac503e8
Compare
Adds some locking around when we de-materialize a dictionary.
Also adds a comment where we'll need qsbr support for materialization.
dict
objects thread-safe in--disable-gil
builds #112075