GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GeezerVison is showing github.com — GH-104142: Fix `_Py_RefcntAdd` to respect immortality by brandtbucher · Pull Request #104143 · python/cpython Conversation
|
|
🤖 New build scheduled with the buildbot fleet by @brandtbucher for commit be3b103 🤖 If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
(Not sure why buildbots aren't running...) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
@brandtbucher cpython/Modules/_testcapi/immortal.c Lines 34 to 38 in 9885677
cpython/Modules/_testcapi/immortal.c Lines 5 to 10 in 9885677
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Ah sorry please ignore #104143 (comment) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| if (_Py_IsImmortal(op)) { | ||
| return; | ||
| } |
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
One quick comment here is that if this were to be in a hot path, I would recommend using the same technique that we use for Py_INCREF to minimize the number of generated instructions to do the check and add: https://github.com/python/cpython/blob/main/Include/object.h#L620-L634
Now, given that it's only in use for sq_repeat in tuple and list, I don't think this is perf sensitive so keeping the code as you have it here should be good.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
| self.assertEqual(sys.getrefcount(immortal), self.IMMORTAL_REFCOUNT) | ||
|
|
||
| def test_immortals(self): | ||
| for immortal in self.IMMORTALS: |
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Small nit: I generally prefer rolling out assertions in unit tests to make it easier to isolate by line-number in the place where the test failed. But I don't think there's a standard in the code base so I'm fine either way
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I'd like comprehensive testing of these immortals though, and I don't want to roll out ~250 different assertions for each test.
I figured making each one a subTest in assert_immortal is a pretty good compromise.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Nice catch, I could have sworn that I had added the check to Thanks for the fix! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
LGTM, all increments to |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
There is a USan failure: Not sure what that means, but the line is in _Py_IsImmortal (https://github.com/brandtbucher/cpython/blob/py-refcnt-add-immortal/Include/object.h#L227), so it may be real. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
🤖 New build scheduled with the buildbot fleet by @JelleZijlstra for commit 1471b39 🤖 If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
(Trying again just in case it was something flaky.) |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Grrr... it failed again. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
I honestly don't know what to do here. It feels like a bug in USan, since I honestly don't get how the new code could cause that failure. But it's reproducible, and indeed seems to indeed be related to my change here. |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Ah, wait, the same buildbot is also failing on So it's an existing issue (but one that probably should still be looked into). |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
See #104190 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
Nice catch! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
* main: (61 commits) pythongh-64595: Argument Clinic: Touch source file if any output file changed (python#104152) pythongh-64631: Test exception messages in cloned Argument Clinic funcs (python#104167) pythongh-68395: Avoid naming conflicts by mangling variable names in Argument Clinic (python#104065) pythongh-64658: Expand Argument Clinic return converter docs (python#104175) pythonGH-103092: port `_asyncio` freelist to module state (python#104196) pythongh-104051: fix crash in test_xxtestfuzz with -We (python#104052) pythongh-104190: fix ubsan crash (python#104191) pythongh-104106: Add gcc fallback of mkfifoat/mknodat for macOS (pythongh-104129) pythonGH-104142: Fix _Py_RefcntAdd to respect immortality (pythonGH-104143) pythongh-104112: link from cached_property docs to method-caching FAQ (python#104113) pythongh-68968: Correcting message display issue with assertEqual (python#103937) pythonGH-103899: Provide a hint when accidentally calling a module (pythonGH-103900) pythongh-103963: fix 'make regen-opcode' in out-of-tree builds (python#104177) pythongh-102500: Add PEP 688 and 698 to the 3.12 release highlights (python#104174) pythonGH-81079: Add case_sensitive argument to `pathlib.Path.glob()` (pythonGH-102710) pythongh-91896: Deprecate collections.abc.ByteString (python#102096) pythongh-99593: Add tests for Unicode C API (part 2) (python#99868) pythongh-102500: Document PEP 688 (python#102571) pythongh-102500: Implement PEP 688 (python#102521) pythongh-96534: socketmodule: support FreeBSD divert(4) socket (python#96536) ...
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.