-
-
Notifications
You must be signed in to change notification settings - Fork 30.3k
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-94808: Cover PyFunction_GetCode
, PyFunction_GetGlobals
, PyFunction_GetModule
#98158
Conversation
…`PyFunction_GetModule`
{ | ||
PyObject *code = PyFunction_GetCode(func); | ||
if (code != NULL) { | ||
Py_INCREF(code); |
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.
Should this Py_INCREF
be here? Shouldn't callee do this? 🤔
Without it I have this error:
test_function_get_module (test.test_capi.CAPITest.test_function_get_module) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
== Tests result: SUCCESS ==
1 test OK.
Total duration: 242 ms
Tests result: SUCCESS
./Include/object.h:625: _Py_NegativeRefcount: Assertion failed: object has negative ref count
<object at 0x1082424d0 is freed>
Fatal Python error: _PyObject_AssertFailed: _PyObject_AssertFailed
Python runtime state: finalizing (tstate=0x000000010759c6d0)
Current thread 0x000000011215d5c0 (most recent call first):
<no Python frame>
[1] 92538 abort ./python.exe -m test -v test_capi -m test_function_get_module
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.
Cc: @markshannon as it pertains to code objects.
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.
I think this is correct, PyFunction_GetCode
is documented as returning a borrowed ref: https://docs.python.org/3/c-api/function.html#c.PyFunction_GetCode
Thanks @sobolevn for the PR, and @JelleZijlstra for merging it 🌮🎉.. I'm working now to backport this PR to: 3.11. |
Sorry, @sobolevn and @JelleZijlstra, I could not cleanly backport this to |
GH-98317 is a backport of this pull request to the 3.11 branch. |
…bals`, `PyFunction_GetModule` (pythonGH-98158). (cherry picked from commit 7b48d02) Co-authored-by: Nikita Sobolev <[email protected]>
* main: (31 commits) pythongh-95913: Move subinterpreter exper removal to 3.11 WhatsNew (pythonGH-98345) pythongh-95914: Add What's New item describing PEP 670 changes (python#98315) Remove unused arrange_output_buffer function from zlibmodule.c. (pythonGH-98358) pythongh-98174: Handle EPROTOTYPE under macOS in test_sendfile_fallback_close_peer_in_the_middle_of_receiving (python#98316) pythonGH-98327: Reduce scope of catch_warnings() in _make_subprocess_transport (python#98333) pythongh-93691: Compiler's code-gen passes location around instead of holding it on the global compiler state (pythonGH-98001) pythongh-97669: Create Tools/build/ directory (python#97963) pythongh-95534: Improve gzip reading speed by 10% (python#97664) pythongh-95913: Forward-port int/str security change to 3.11 What's New in main (python#98344) pythonGH-91415: Mention alphabetical sort ordering in the Sorting HOWTO (pythonGH-98336) pythongh-97930: Merge with importlib_resources 5.9 (pythonGH-97929) pythongh-85525: Remove extra row in doc (python#98337) pythongh-85299: Add note warning about entry point guard for asyncio example (python#93457) pythongh-97527: IDLE - fix buggy macosx patch (python#98313) pythongh-98307: Add docstring and documentation for SysLogHandler.createSocket (pythonGH-98319) pythongh-94808: Cover `PyFunction_GetCode`, `PyFunction_GetGlobals`, `PyFunction_GetModule` (python#98158) pythonGH-94597: Deprecate child watcher getters and setters (python#98215) pythongh-98254: Include stdlib module names in error messages for NameErrors (python#98255) Improve speed. Reduce auxiliary memory to 16.6% of the main array. (pythonGH-98294) [doc] Update logging cookbook with an example of custom handling of levels. (pythonGH-98290) ...
#98317) [3.11] gh-94808: Cover `PyFunction_GetCode`, `PyFunction_GetGlobals`, `PyFunction_GetModule` (GH-98158). (cherry picked from commit 7b48d02) Co-authored-by: Nikita Sobolev <[email protected]>
In the next PRs I will cover
PyFunction_*
methods with setters.