bpo-43541: Fix PyEval_EvalCodeEx() regression#24918
bpo-43541: Fix PyEval_EvalCodeEx() regression#24918vstinner merged 1 commit intopython:masterfrom vstinner:eval_code_ex
Conversation
* Remove an assertion which required CO_NEWLOCALS and CO_OPTIMIZED code flags. It is ok to call this function on a code with these flags set. * Fix reference counting on builtins: remove Py_DECREF(). Fix regression introduced in the commit 46496f9. Add also a comment to document that _PyEval_BuiltinsFromGlobals() returns a borrowed reference.
|
Why not have Otherwise, looks good. |
Before my 46496f9 change, _PyEval_BuiltinsFromGlobals() could call PyDict_New() sometimes: strong reference. With my change, it doesn't have to create a new strong reference anymore. So I chose to return a borrowed reference. But I tried to keep a strong reference as soon as possible where it looks relevant. I compared with Python 3.9 behavior which doesn't hold strong references while using builtins. I know that there are some crazy ways of crashing Python caused by borrowed references, but in general it's fine and Py_INCREF/Py_DECREF has an impact on performance. For example, https://bugs.python.org/issue15108 is a bug but it was closed as "not a bug". If someone spots a dangerous usage of builtins, INCREF/DECREF can be added around the usage. |
|
I merged my PR.
Thanks for the review Mark! |
|
Using a strong reference would have no negative impact on performance, since |
* master: (129 commits) bpo-43452: Micro-optimizations to PyType_Lookup (pythonGH-24804) bpo-43517: Fix false positive in detection of circular imports (python#24895) bpo-43494: Make some minor changes to lnotab notes (pythonGH-24861) Mention that code.co_lnotab is deprecated in what's new for 3.10. (python#24902) bpo-43244: Remove symtable.h header file (pythonGH-24910) bpo-43466: Add --with-openssl-rpath configure option (pythonGH-24820) Fix a typo in c-analyzer (pythonGH-24468) bpo-41561: Add workaround for Ubuntu's custom security level (pythonGH-24915) bpo-43521: Allow ast.unparse with empty sets and NaN (pythonGH-24897) bpo-43244: Remove the PyAST_Validate() function (pythonGH-24911) bpo-43541: Fix PyEval_EvalCodeEx() regression (pythonGH-24918) bpo-43244: Fix test_peg_generators on Windows (pythonGH-24913) bpo-39342: Expose X509_V_FLAG_ALLOW_PROXY_CERTS in ssl module (pythonGH-18011) bpo-43244: Fix test_peg_generator for PyAST_Validate() (pythonGH-24912) bpo-42128: Add 'missing :' syntax error message to match statements (pythonGH-24733) bpo-43244: Add pycore_ast.h header file (pythonGH-24908) bpo-43244: Rename pycore_ast.h to pycore_ast_state.h (pythonGH-24907) Remove unnecessary imports in the grammar parser (pythonGH-24904) bpo-35883: Py_DecodeLocale() escapes invalid Unicode characters (pythonGH-24843) Add PEP 626 to what's new in 3.10. (python#24892) ...
code flags. It is ok to call this function on a code with these
flags set.
Fix regression introduced in the
commit 46496f9.
Add also a comment to document that _PyEval_BuiltinsFromGlobals()
returns a borrowed reference.
https://bugs.python.org/issue43541