Skip to content

Conversation

encukou
Copy link
Member

@encukou encukou 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

@vstinner vstinner 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

@pablogsal pablogsal merged commit 8c6885d into python:3.11 Nov 6, 2024
25 checks passed
@encukou encukou deleted the openwrapper-test-3.11 branch November 6, 2024 14:50
@encukou
Copy link
Member Author

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
Member Author

encukou commented Nov 11, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
skip news tests Tests in the Lib/test dir
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants