Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-104252: Immortalize Py_EMPTY_KEYS#104253

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged

Conversation

ericsnowcurrently
Copy link
Member

@ericsnowcurrentlyericsnowcurrently commentedMay 6, 2023
edited by bedevere-bot
Loading

This was missed ingh-19474. It matters for with a per-interpreter GIL sincePyDictKeysObject.dk_refcnt breaks isolation and leads to races.

cc@eduardo-elizondo

Copy link
Member

@sunmy2019sunmy2019 left a comment
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

There are other places with direct changes todk_refcnt. They are not guarded.

dk->dk_refcnt=1;

/* Since we copied the keys table we now have an extra reference
in the system. Manually call increment _Py_RefTotal to signal that
we have it now; calling dictkeys_incref would be an error as
keys->dk_refcnt is already set to 1 (after memcpy). */
#ifdefPy_REF_DEBUG
_Py_IncRefTotal(_PyInterpreterState_GET());
#endif

// We can not use free_keys_object here because key's reference
// are moved already.
#ifdefPy_REF_DEBUG
_Py_DecRefTotal(_PyInterpreterState_GET());
#endif
if (oldkeys==Py_EMPTY_KEYS) {
oldkeys->dk_refcnt--;
assert(oldkeys->dk_refcnt>0);
}

@ericsnowcurrently
Copy link
MemberAuthor

ericsnowcurrently commentedMay 8, 2023
edited
Loading

@sunmy2019, thanks for pointing out the other uses ofdk_refcnt. I'll fix that.

[done]

@methane
Copy link
Member

Please remove these lines too:

dictkeys_incref(Py_EMPTY_KEYS);

dictkeys_decref(interp,Py_EMPTY_KEYS);

And Move_Py_DecRefTotal() intoif (oldkeys != Py_EMPTY_KEYS) block.

#ifdefPy_REF_DEBUG
_Py_DecRefTotal(_PyInterpreterState_GET());
#endif
if (oldkeys!=Py_EMPTY_KEYS) {

ericsnowcurrently reacted with thumbs up emoji

@ericsnowcurrently
Copy link
MemberAuthor

Thanks for the feedback. I'll clean things up tomorrow.

@sunmy2019sunmy2019 added the 🔨 test-with-refleak-buildbotsTest PR w/ refleak buildbots; report in status section labelMay 9, 2023
@bedevere-bot
Copy link

🤖 New build scheduled with the buildbot fleet by@sunmy2019 for commit5aabfd7 🤖

If you want to schedule another build, you need to add the🔨 test-with-refleak-buildbots label again.

@bedevere-botbedevere-bot removed the 🔨 test-with-refleak-buildbotsTest PR w/ refleak buildbots; report in status section labelMay 9, 2023
sunmy2019

This comment was marked as duplicate.

Copy link
Member

@sunmy2019sunmy2019 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

LGTM! now it's much cleaner

@ericsnowcurrentlyericsnowcurrently merged commitb8f7ab5 intopython:mainMay 10, 2023
@ericsnowcurrentlyericsnowcurrently deleted the immortalize-empty-keys branchMay 10, 2023 13:28
@ericsnowcurrently
Copy link
MemberAuthor

Thanks for the reviews!

carljm added a commit to carljm/cpython that referenced this pull requestMay 10, 2023
* main:pythonGH-102181: Improve specialization stats for SEND (pythonGH-102182)pythongh-103000: Optimise `dataclasses.asdict` for the common case (python#104364)pythongh-103538: Remove unused TK_AQUA code (pythonGH-103539)pythonGH-87695: Fix OSError from `pathlib.Path.glob()` (pythonGH-104292)pythongh-104263: Rely on Py_NAN and introduce Py_INFINITY (pythonGH-104202)pythongh-104010: Separate and improve docs for `typing.get_origin` and `typing.get_args` (python#104013)pythongh-101819: Adapt _io._BufferedIOBase_Type methods to Argument Clinic (python#104355)pythongh-103960: Dark mode: invert image brightness (python#103983)pythongh-104252: Immortalize Py_EMPTY_KEYS (pythongh-104253)pythongh-101819: Clean up _io windows console io afterpythongh-104197 (python#104354)pythongh-101819: Harden _io init (python#104352)pythongh-103247: clear the module cache in a test in test_importlib/extensions/test_loader.py (pythonGH-104226)pythongh-103848: Adds checks to ensure that bracketed hosts found by urlsplit are of IPv6 or IPvFuture format (python#103849)pythongh-74895: adjust tests to work on Solaris (python#104326)pythongh-101819: Refactor _io in preparation for module isolation (python#104334)pythongh-90953: Don't use deprecated AST nodes in clinic.py (python#104322)pythongh-102327: Extend docs for "url" and "headers" parameters to HTTPConnection.request()pythongh-104328: Fix typo in ``typing.Generic`` multiple inheritance error message (python#104335)
carljm added a commit to carljm/cpython that referenced this pull requestMay 11, 2023
* main: (27 commits)pythongh-87849: fix SEND specialization family definition (pythonGH-104268)pythongh-101819: Adapt _io.IOBase.seek and _io.IOBase.truncate to Argument Clinic (python#104384)pythongh-101819: Adapt _io._Buffered* methods to Argument Clinic (python#104367)pythongh-101819: Refactor `_io` futher in preparation for module isolation (python#104369)pythongh-101819: Adapt _io.TextIOBase methods to Argument Clinic (python#104383)pythongh-101117: Improve accuracy of sqlite3.Cursor.rowcount docs (python#104287)pythonGH-92184: Convert os.altsep to '/' in filenames when creating ZipInfo objects (python#92185)pythongh-104357: fix inlined comprehensions that close over iteration var (python#104368)pythonGH-90208: Suppress OSError exceptions from `pathlib.Path.glob()` (pythonGH-104141)pythonGH-102181: Improve specialization stats for SEND (pythonGH-102182)pythongh-103000: Optimise `dataclasses.asdict` for the common case (python#104364)pythongh-103538: Remove unused TK_AQUA code (pythonGH-103539)pythonGH-87695: Fix OSError from `pathlib.Path.glob()` (pythonGH-104292)pythongh-104263: Rely on Py_NAN and introduce Py_INFINITY (pythonGH-104202)pythongh-104010: Separate and improve docs for `typing.get_origin` and `typing.get_args` (python#104013)pythongh-101819: Adapt _io._BufferedIOBase_Type methods to Argument Clinic (python#104355)pythongh-103960: Dark mode: invert image brightness (python#103983)pythongh-104252: Immortalize Py_EMPTY_KEYS (pythongh-104253)pythongh-101819: Clean up _io windows console io afterpythongh-104197 (python#104354)pythongh-101819: Harden _io init (python#104352)  ...
@eduardo-elizondo
Copy link
Contributor

Nice fix! I just got around to looking at this PR, it was weird thinking about the PyDictKeysObject since they were not PyObjects, so I just let them be. That being said, this LGTM specially if we are trying to share as much state as possible.

ericsnowcurrently reacted with thumbs up emoji

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@methanemethanemethane approved these changes

@sunmy2019sunmy2019sunmy2019 approved these changes

@markshannonmarkshannonAwaiting requested review from markshannonmarkshannon is a code owner

Assignees
No one assigned
Labels
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

5 participants
@ericsnowcurrently@methane@bedevere-bot@eduardo-elizondo@sunmy2019

[8]ページ先頭

©2009-2025 Movatter.jp