Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gh-104252: Immortalize Py_EMPTY_KEYS #104253
Uh oh!
There was an error while loading. Please reload this page.
Conversation
ericsnowcurrently commented May 6, 2023 • edited by bedevere-bot
Loading Uh oh!
There was an error while loading. Please reload this page.
edited by bedevere-bot
Uh oh!
There was an error while loading. Please reload this page.
sunmy2019 left a comment • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
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 to dk_refcnt. They are not guarded.
Line 639 in 4729383
| dk->dk_refcnt=1; |
Lines 822 to 828 in 4729383
| /* 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 |
Lines 1530 to 1538 in 4729383
| // 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); | |
| } |
Uh oh!
There was an error while loading. Please reload this page.
ericsnowcurrently commented May 8, 2023 • edited
Loading Uh oh!
There was an error while loading. Please reload this page.
edited
Uh oh!
There was an error while loading. Please reload this page.
@sunmy2019, thanks for pointing out the other uses of [done] |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
methane commented May 9, 2023
Please remove these lines too: Line 849 in 58585a9
Line 1347 in 58585a9
And Move Lines 1545 to 1548 in 58585a9
|
ericsnowcurrently commented May 9, 2023
Thanks for the feedback. I'll clean things up tomorrow. |
bedevere-bot commented May 9, 2023
🤖 New build scheduled with the buildbot fleet by @sunmy2019 for commit 5aabfd7 🤖 If you want to schedule another build, you need to add the 🔨 test-with-refleak-buildbots label again. |
This comment was marked as duplicate.
This comment was marked as duplicate.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
sunmy2019 left a comment
There was a problem hiding this 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
ericsnowcurrently commented May 10, 2023
Thanks for the reviews! |
* 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 after pythongh-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)
* 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 after pythongh-104197 (python#104354) pythongh-101819: Harden _io init (python#104352) ...
eduardo-elizondo commented Jun 19, 2023
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. |
This was missed in gh-19474. It matters for with a per-interpreter GIL since
PyDictKeysObject.dk_refcntbreaks isolation and leads to races.cc @eduardo-elizondo