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-1635741: pyexpat error handling by koubaa · Pull Request #22489 · python/cpython

Conversation

@koubaa

@koubaa koubaa commented Oct 2, 2020 •
edited by bedevere-bot
Loading

Uh oh!

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

Copy link
Copy Markdown
Contributor

Preparation for multi-phase init. See #22222 for origin of most of these changes

https://bugs.python.org/issue1635741

Sorry, something went wrong.

Uh oh!

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

All reactions
koubaa added 2 commits October 1, 2020 21:26
@koubaa
error handling 1
e48b24d
@koubaa
address PR comments
0e536f6
@the-knights-who-say-ni the-knights-who-say-ni added the CLA signed label Oct 2, 2020
@bedevere-bot bedevere-bot added the awaiting review label Oct 2, 2020
@koubaa

koubaa commented Oct 2, 2020

Copy link
Copy Markdown
Contributor Author

@vstinner please review

All reactions

Sorry, something went wrong.

Uh oh!

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

vstinner
vstinner reviewed Oct 2, 2020
View reviewed changes
Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

@vstinner vstinner mentioned this pull request Oct 2, 2020
bpo-1635741: port pyexpat to multi-phase init (PEP 489) #22222
Merged
@vstinner

vstinner commented Oct 2, 2020

Copy link
Copy Markdown
Member

Since you plan to convert pyexpat to multiphase init, could you already add an "exec" function, and modify the PyInit to call it? So later you will have no replace all "goto error" with "return -1".

All reactions

Sorry, something went wrong.

Uh oh!

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

koubaa added 2 commits October 10, 2020 13:13
@koubaa
update based on PR review
0b56510
@koubaa
pull submodule into helper function
a994d8a
@koubaa

koubaa commented Oct 12, 2020

Copy link
Copy Markdown
Contributor Author

@vstinner this is ready now

All reactions

Sorry, something went wrong.

Uh oh!

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

vstinner
vstinner reviewed Oct 14, 2020
View reviewed changes

@vstinner vstinner left a comment

Copy link
Copy Markdown
Member

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.

Thanks, add_submodule() is nice. But my idea was to go further and put all code using errors_module in a sub-function and call it from the init function. Same for model_module.

Sorry, something went wrong.

Uh oh!

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

All reactions
@koubaa

koubaa commented Oct 14, 2020

Copy link
Copy Markdown
Contributor Author

Thanks, add_submodule() is nice. But my idea was to go further and put all code using errors_module in a sub-function and call it from the init function. Same for model_module.

Oh - sure I can do that.

All reactions

Sorry, something went wrong.

Uh oh!

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

@koubaa
pull submodule code into helper functions
fb2bcf7
@koubaa

koubaa commented Oct 19, 2020

Copy link
Copy Markdown
Contributor Author

@vstinner done

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner vstinner added the skip news label Nov 1, 2020
vstinner
vstinner reviewed Nov 1, 2020
View reviewed changes
Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

@koubaa
address comments
f99b31c
vstinner
vstinner reviewed Nov 2, 2020
View reviewed changes

@vstinner vstinner left a comment

Copy link
Copy Markdown
Member

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.

Thanks, it's way better! Variables have a shorter scopes, error handling is easier to review. More comments.

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

@koubaa
update based on review
25c1070
vstinner
vstinner approved these changes Nov 3, 2020
View reviewed changes

@vstinner vstinner left a comment

Copy link
Copy Markdown
Member

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.

LGTM, but please address the few minor remaining issues before I can merge your change.

Oh wow, I didn't expect a so large PR to add error handling to PyInit_pyexpat()! Maybe there was a reason to ignore errors :-D It's complex to handle errors in C :-(

I like the new design of the code with many smaller functions and more narrow scope for variables. It's way simpler to track the lifetime of each variable, and so check manually for reference leaks!

Note: I still hate the INCREF/DECREF required by PyModule_AddObject() (that's unrelated to your PR, I just hate this function.)

Sorry, something went wrong.

Uh oh!

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

All reactions
Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

Comment thread Modules/pyexpat.c Resolved

Uh oh!

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

@bedevere-bot bedevere-bot added awaiting merge and removed awaiting review labels Nov 3, 2020
@koubaa
readability:
e905596
@koubaa

koubaa commented Nov 4, 2020

Copy link
Copy Markdown
Contributor Author

@vstinner done

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner
vstinner merged commit 7184218 into python:master Nov 4, 2020
@bedevere-bot bedevere-bot removed the awaiting merge label Nov 4, 2020
@vstinner

vstinner commented Nov 4, 2020

Copy link
Copy Markdown
Member

Merged. I rewrote your PR title and description.

All reactions

Sorry, something went wrong.

Uh oh!

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

shihai1991 added a commit to shihai1991/cpython that referenced this pull request Nov 5, 2020
@shihai1991
Merge branch 'master' into bpo_41832
c267e35
* master:
  bpo-42260: Add _PyInterpreterState_SetConfig() (pythonGH-23158)
  Disable peg generator tests when building with PGO (pythonGH-23141)
  bpo-1635741: _sqlite3 uses PyModule_AddObjectRef() (pythonGH-23148)
  bpo-1635741: Fix PyInit_pyexpat() error handling (pythonGH-22489)
  bpo-42260: Main init modify sys.flags in-place (pythonGH-23150)
  bpo-1635741: Fix ref leak in _PyWarnings_Init() error path (pythonGH-23151)
  bpo-1635741: _ast uses PyModule_AddObjectRef() (pythonGH-23146)
  bpo-1635741: _contextvars uses PyModule_AddType() (pythonGH-23147)
  bpo-42260: Reorganize PyConfig (pythonGH-23149)
  bpo-1635741: Add PyModule_AddObjectRef() function (pythonGH-23122)
  bpo-42236: os.device_encoding() respects UTF-8 Mode (pythonGH-23119)
  bpo-42251: Add gettrace and getprofile to threading (pythonGH-23125)
  Enable signing of nuget.org packages and update to supported timestamp server (pythonGH-23132)
  Fix incorrect links in ast docs (pythonGH-23017)
  Add _PyType_GetModuleByDef (pythonGH-22835)
  Post 3.10.0a2
  bpo-41796: Call _PyAST_Fini() earlier to fix a leak (pythonGH-23131)
  bpo-42249: Fix writing binary Plist files larger than 4 GiB. (pythonGH-23121)
  bpo-40077: Convert mmap.mmap static type to a heap type (pythonGH-23108)
  Python 3.10.0a2
shihai1991 added a commit to shihai1991/cpython that referenced this pull request Nov 7, 2020
@shihai1991
Merge remote-tracking branch 'origin/master' into bpo_41073_add_types…
2d72953
…lots1

* origin/master: (80 commits)
  bpo-42282: Fold constants inside named expressions (pythonGH-23190)
  bpo-41028: Doc: Move switchers to docsbuild-scripts. (pythonGH-20969)
  bpo-42133: update parts of the stdlib to fall back to `__spec__.loader` when `__loader__` is missing (python#22929)
  Remove outdated reference to pywin32 from platform module (pythonGH-22005)
  bpo-41832: PyType_FromModuleAndSpec() now accepts NULL tp_doc (pythonGH-23123)
  Minor grammar edits for the descriptor howto guide (GH-python#23175)
  bpo-42179: Doc/tutorial: Remove mention of __cause__ (pythonGH-23162)
  bpo-26389: Allow passing an exception object in the traceback module (pythonGH-22610)
  bpo-42260: PyConfig_Read() only parses argv once (pythonGH-23168)
  bpo-42260: Add _PyConfig_FromDict() (pythonGH-23167)
  bpo-41877 Check for asert, aseert, assrt in mocks (pythonGH-23165)
  [docs] fix wrongly named AsyncContextDecorator (pythonGH-23164)
  bpo-42262: Add Py_NewRef() and Py_XNewRef() (pythonGH-23152)
  bpo-42266: Handle monkey-patching descriptors in LOAD_ATTR cache (pythonGH-23157)
  bpo-40816 Add AsyncContextDecorator class (pythonGH-20516)
  bpo-42260: Add _PyInterpreterState_SetConfig() (pythonGH-23158)
  Disable peg generator tests when building with PGO (pythonGH-23141)
  bpo-1635741: _sqlite3 uses PyModule_AddObjectRef() (pythonGH-23148)
  bpo-1635741: Fix PyInit_pyexpat() error handling (pythonGH-22489)
  bpo-42260: Main init modify sys.flags in-place (pythonGH-23150)
  ...
adorilson pushed a commit to adorilson/cpython that referenced this pull request Mar 13, 2021
@koubaa @adorilson
bpo-1635741: Fix PyInit_pyexpat() error handling (pythonGH-22489)
1ba72a3
Split PyInit_pyexpat() into sub-functions and fix reference leaks
on error paths.
@kylotan kylotan mannequin mentioned this pull request Sep 19, 2022
Py_Finalize() doesn't clear all Python objects at exit #44470
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@vstinner vstinner vstinner approved these changes

Uh oh!

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

Assignees

No one assigned

Labels

skip news

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

@koubaa @vstinner @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 01402503 — 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.