Skip to content

Conversation

@encukou
Copy link
Member

@encukouencukou commented Nov 6, 2024

@pablogsal, are you interested in fixing 3.11 buildbots that consistently warn, rather than fail?


test_io fails if test_openwrapper runs before test___all__. This consistently happens on some refleaks buildbots, for example Windows or Fedora, but it's only marked as a warning: when only test___all__ is re-run in a fresh process, it succeeds.

Locally, this can be reproduced by running test_openwrapper and test__all__, twice (since in a single run, test_openwrapper comes after test___all__). I don't know of a more elegant way than:

./python -m test test_io test_io -m '*test_[o_][p_][ea][nl][wl]*' -v 

The reason is that the deprecated OpenWrapper is added to the module on demand in __getattr__, after which it shows up in dir(io).

Add it to not_exported so that check__all__ ignores it when it exists.

The deprecated `OpenWrapper` is added to the module on demand in `__getattr__`, so it might or might not show up in `dir(io)` depending on whether e.g. `test_openwrapper` was run. Add it to `not_exported` so that check__all__ ignores it when it exists. The test consistently failed on some refleaks buildbots (but not when the test is re-run, so it was only marked as a warning). Locally, it can be reproduced by running `test_openwrapper` and `test__all__`, twice: ./python -m test test_io test_io -m '*test_[o_][p_][ea][nl][wl]*' -v
Copy link
Member

@vstinnervstinner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@pablogsal
Copy link
Member

I'm fine to backport since this is a change in tests

@pablogsalpablogsal merged commit 8c6885d into python:3.11Nov 6, 2024
@encukouencukou deleted the openwrapper-test-3.11 branch November 6, 2024 14:50
@encukou
Copy link
MemberAuthor

encukou commented Nov 7, 2024

After this was merged, all the 3.11 refleaks buildbots turned red. But, that's an improvement!

There's a pre-existing refleak that was hidden like this:

  • the first test run failed, so the leak check was skipped
  • the second run only ran the failing test_all, which does not leak

I'll find and write/backport a fix. (update: see #111942)

encukou added a commit to encukou/cpython that referenced this pull request Nov 7, 2024
…e_encoding There's an issue with the 3.11 backport commit e2421a3 The chane for the main branch was: ```diff + Py_INCREF(errors); ... Py_SETREF(self->encoding, encoding); - Py_SETREF(self->errors, Py_NewRef(errors)); + Py_SETREF(self->errors, errors); ``` but in 3.11 this became: ```diff + Py_INCREF(errors); ... Py_INCREF(errors); Py_SETREF(self->encoding, encoding); Py_SETREF(self->errors, errors); ``` i.e. there's an extra incref, but it looks -- at least to Git -- like the change that removes `Py_NewRef` was already applied. This was not caught because `test_io` refleaks tests were ineffective on 3.11 (see python#126478 (comment)). Remove the extraneous incref.
@encukou
Copy link
MemberAuthor

FWTW, 3.10 is unaffected: it doesn't have #111370.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

skip newstestsTests in the Lib/test dir

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@encukou@pablogsal@vstinner