gh-150490: Raise PyType_Modified for insertion into split dictionary (take 2)#152914
gh-150490: Raise PyType_Modified for insertion into split dictionary (take 2)#152914DinoV wants to merge 2 commits into
Conversation
|
Nice solution! This looks good, with the following minor comments:
|
|
Claude Fable has some comments on the PR: Additional findings, new to this commit:
Fable also suggests that we need to change the read order in The previously dangerous case - a fresh version paired with a stale "key absent" observation - can no longer occur because the keys read is now the later of the two. |
…ace in specialize_instance_load_attr
I just went ahead and inlined |
Take 2 of #150489 - what's changed is that we now acquire the type lock in
insert_split_key before we acquire the keys lock. We never do any work below the dictionary keys lock so we maintain an invariant that we don't have inverted lock acquisition leading to a deadlock. Also adds @nascheme's test case../python -m test --tsan-parallel --parallel-threads=4 -j4 -W` is no longer hanging.When we insert into a split dictionary we update the shared keys version - this is used to invalidate caches for loading methods and loading class values and requires us to check the keys version. Instead we can raise PyType_Modified which lets us rely on the type version check + has inline values check instead of validating that we have the correct keys version. This gets rid of loading the cached keys version, the objects type (although likely the compiler eliminates this already), loading the cached keys from the type, and then loading the keys version and comparing it against the cached value.