GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — bpo-43541: Fix PyEval_EvalCodeEx() regression by vstinner · Pull Request #24918 · python/cpython

Conversation

@vstinner

@vstinner vstinner commented Mar 18, 2021 •
edited by bedevere-bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member
  • 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.

https://bugs.python.org/issue43541

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@vstinner
vstinner requested a review from markshannon as a code owner March 18, 2021 11:43
@the-knights-who-say-ni the-knights-who-say-ni added the CLA signed label Mar 18, 2021
@bedevere-bot bedevere-bot added the awaiting core review label Mar 18, 2021
@vstinner
bpo-43541: Fix PyEval_EvalCodeEx() regression
ce1aecc
* 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.
@markshannon

markshannon commented Mar 18, 2021

Copy link
Copy Markdown
Member

Why not have _PyEval_BuiltinsFromGlobals() return a strong reference?
Returning borrowed references is always risky.

Otherwise, looks good.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@vstinner

vstinner commented Mar 18, 2021

Copy link
Copy Markdown
Member Author

Why not have _PyEval_BuiltinsFromGlobals() return a strong reference? Returning borrowed references is always risky.

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.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@vstinner
vstinner merged commit fc980e0 into python:master Mar 18, 2021
@bedevere-bot bedevere-bot removed the awaiting core review label Mar 18, 2021
@vstinner
vstinner deleted the eval_code_ex branch March 18, 2021 13:51
@vstinner

vstinner commented Mar 18, 2021

Copy link
Copy Markdown
Member Author

I merged my PR.

Otherwise, looks good.

Thanks for the review Mark!

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@markshannon

markshannon commented Mar 18, 2021

Copy link
Copy Markdown
Member

Using a strong reference would have no negative impact on performance, since PyFunction_NewWithQualName needs to increment the refcount anyway. All the other uses are in legacy API where we don't care about performance.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

jab added a commit to jab/cpython that referenced this pull request Mar 20, 2021
@jab
Merge branch 'master' into justin39/aiter-c
97d06e5
* 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)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@markshannon markshannon Awaiting requested review from markshannon

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@vstinner @markshannon @the-knights-who-say-ni @bedevere-bot
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.