-
-
Notifications
You must be signed in to change notification settings - Fork 31.1k
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
bpo-43541: Fix PyEval_EvalCodeEx() regression #24918
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