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-43760: Add PyThreadState_EnterTracing() by vstinner · Pull Request #28542 · python/cpython

Conversation

@vstinner

@vstinner vstinner commented Sep 24, 2021 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Member

Add PyThreadState_EnterTracing(), PyThreadState_LeaveTracing() and
PyThreadState_IsTracing() functions to the limited C API to suspend
and resume tracing and profiling.

Add an unit test on the PyThreadState C API to _testcapi.

Add also internal _PyThreadState_DisableTracing() and
_PyThreadState_ResetTracing().

https://bugs.python.org/issue43760

Sorry, something went wrong.

Uh oh!

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

All reactions
@vstinner
vstinner requested review from a team and markshannon as code owners September 24, 2021 09:27
@the-knights-who-say-ni the-knights-who-say-ni added the CLA signed label Sep 24, 2021
@bedevere-bot bedevere-bot added the awaiting core review label Sep 24, 2021
@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

@markshannon @pablogsal: Would you mind to check if my proposed C API is correct?

The documentation doesn't explain on purpose that the change is only applied to the current frame and how it is inherited or not to older and newer frames. Should we explain it?

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

@pablogsal: If possible, I would prefer to land this C API in Python 3.10, since use_tracing was removed in Python 3.10. But since you told me that it's not going to happen (I'm not sure why, a new C API should not break anything), my PR targets Python 3.11.

But I have to add a compatibility anyway to https://github.com/pythoncapi/pythoncapi_compat for projects which want to use these new C API, to support old Python versions. In Python 3.9, these compatibility functions would use tstate->use_tracing. In Python 3.10, they would use tstate->cframe.use_tracing. In Python 3.11, they would not be declared, but use the new functions from the Python C API.

Without pythoncapi_compat, projects can use an #ifdef with 3 code paths:

  • Python <= 3.9: tstate->use_tracing
  • Python 3.10: tstate->cframe.use_tracing
  • Python 3.11: use the new C API
All reactions

Sorry, something went wrong.

Uh oh!

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

@pablogsal

pablogsal commented Sep 24, 2021

Copy link
Copy Markdown
Member

@pablogsal: If possible, I would prefer to land this C API in Python 3.10, since use_tracing was removed in Python 3.10. But since you told me that it's not going to happen (I'm not sure why, a new C API should not break anything), my PR targets Python 3.11.

Sorry Victor, but there is no way we can be adding any new APIs after feature freeze. What is more important: we cannot add a new C API in a release candidate. What is even more important: we cannot add a new C API in a release candidate that won't be tested by the community because the only release will directly be Python 3.10.0. All the rules I abide as release manager forces me to forbid backporting this to 3.10 unfortunately.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

Pablo: "Sorry Victor, but there is no way we can be adding any new APIs after feature freeze. What is more important: we cannot add a new C API in a release candidate."

pythoncapi_compat will provide a practical solution to have a single code base support Python 3.9 and older, 3.10 and 3.11 and newer (well, all Python versions), so no need for #ifdef.

Projects which don't want pythoncapi_compat like greenlet or Cython already have their own #ifdef code.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner vstinner mentioned this pull request Sep 24, 2021
Add PyThreadState_DisableTracing() python/pythoncapi-compat#12
Closed
@vstinner

vstinner commented Sep 24, 2021 •
edited by bedevere-bot
Loading

Uh oh!

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

Copy link
Copy Markdown
Member Author

I created a PR to add these 3 functions to pythoncapi_compat: python/pythoncapi-compat#12

Example:

// [bpo-43760](https://bugs.python.org/issue43760) added PyThreadState_DisableTracing() to Python 3.11.0a1
#if PY_VERSION_HEX < 0x030B00A1 && !defined(PYPY_VERSION)
static inline void
PyThreadState_DisableTracing(PyThreadState *tstate)
{
#if PY_VERSION_HEX >= 0X030A00B1
    tstate->cframe->use_tracing = 0;
#else
    tstate->use_tracing = 0;
#endif
}
#endif
All reactions

Sorry, something went wrong.

Uh oh!

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

@markshannon

markshannon commented Sep 24, 2021

Copy link
Copy Markdown
Member

The meaning of use_tracing is a fast check to tell the interpreter whether it needs to do slow checks for tracing.
We should not be providing an API to set it.

We already have an API to turn off tracing, PyEval_SetTrace(NULL, NULL). We don't need another one.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

We already have an API to turn off tracing, PyEval_SetTrace(NULL, NULL). We don't need another one.

The use case is to disable tracing and profiling temporarily, do something, and then reenable if (if needed, or keep it disabled). See: https://bugs.python.org/issue43760#msg393410

There is no PyEval_GetTrace() function nor PyEval_GetProfile() function. How do you reenable tracing and profiling with the existing C API?

CPython always had a feature to disable tracing and profiling even if a trace function or a profile function was set: it's the use_tracing flag. Are you suggesting to remove this feature? The features is used by at least 5 projects in the wild: https://bugs.python.org/issue43760#msg402150

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021 •
edited
Loading

Uh oh!

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

Copy link
Copy Markdown
Member Author

About the portability of this C API, while working on my pythoncapi_compat PR python/pythoncapi-compat#12, I noticed that PyPy has no such API. Moreover, PyPy doesn't have PyEval_SetTrace() and PyEval_SetProfile() functions.

This PR is a solution specific to CPython, it's more about the backward compatibility, then designing a future proof C API working on any Python implementation.

All reactions

Sorry, something went wrong.

Uh oh!

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

@gvanrossum

gvanrossum commented Sep 24, 2021

Copy link
Copy Markdown
Member

Can someone explain to me what pythoncapi_compat is?

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

Can someone explain to me what pythoncapi_compat is?

It's like the six module, but for C extensions :-) I wrote it to have a single code base supporting old and new Python versions, especially supporting old and new versions of the Python C API. Projects are freed to use it or not ;-) As many projects chose to write their own compatibility layer for Python 2 and Python 3.

https://github.com/pythoncapi/pythoncapi_compat

All reactions

Sorry, something went wrong.

Uh oh!

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

@gvanrossum

gvanrossum commented Sep 24, 2021

Copy link
Copy Markdown
Member

Ah cool. Makes sense.

Next question. What use does Cython have for this field? Doe it turn tracing om/off, or does it just need to read the flag?

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Sep 24, 2021

Copy link
Copy Markdown
Member Author

Guido: "Next question. What use does Cython have for this field? Doe it turn tracing om/off, or does it just need to read the flag?"

I wrote an analysis of use_tracing usage: https://bugs.python.org/issue43760#msg402594

All reactions

Sorry, something went wrong.

Uh oh!

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

@markshannon

markshannon commented Oct 4, 2021

Copy link
Copy Markdown
Member

This will need updating to set use_tracing to 255, not 1. See #28723

All reactions

Sorry, something went wrong.

Uh oh!

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

@markshannon

markshannon commented Oct 4, 2021

Copy link
Copy Markdown
Member

Presumably these functions are to turn off tracing when entering a tracing function. tstate->tracing should suffice for that, but I assume that Cython will want to set use_tracing for performance reasons.

Given that, rather than phrasing the API in terms of suspending tracing, we should phrase it term of entering the tracing function.
PyEnterTracing() and PyLeaveTracing(). Tracing is suspended if the number of calls to PyEnterTracing() exceeds the number of calls to PyLeaveTracing().

The semantics would be as follows:

void PyEnterTracing(tstate) {
     tstate->tracing++;
}

void PyLeaveTracing(tstate) {
     tstate->tracing--;
}

The actual implementation would update tstate->cframe->use_tracing as appropriate.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner vstinner changed the title bpo-43760: Add PyThreadState_DisableTracing() bpo-43760: Add PyThreadState_EnterTracing() Oct 13, 2021
@vstinner

vstinner commented Oct 13, 2021

Copy link
Copy Markdown
Member Author

@markshannon: I rewrote the PR, would you mind to review it again?

I renamed functions of the public C API.

The public C API uses tracing++ and tracing--, whereas the internal C API only sets use_tracing.

I also elaborated the PyThreadState_IsTracing() documentation:

   Is tracing or profiling enabled in the Python thread state *tstate*?

   Return 0 if no tracing function and no profiling function is set.

   Return 0 if tracing and profiling is suspended by the
   :c:func:`PyThreadState_EnterTracing` function.
All reactions

Sorry, something went wrong.

Uh oh!

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

@encukou

encukou commented Oct 14, 2021

Copy link
Copy Markdown
Member

Consider adding this only to the public API, and only putting it in the stable ABI after it's proven to be useful and complete.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

@encukou:

Consider adding this only to the public API, and only putting it in the stable ABI after it's proven to be useful and complete.

Good idea. I excluded the new functions from the limited C API. I don't think that Cython needs the stable ABI for profiling now. There is a work-in-progress to restrict Cython to the limited C API, but as you said, we can add the Tracing API to the stable ABI later.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

I created a new PR in pythoncapi_compat to provide these new functions on Python 3.10 and older: python/pythoncapi-compat#13

My implementation handles Python 3.10 which added PyThreadState.cframe. It avoids having 3 code paths:

  • Python 3.11.0a2 and newer which uses 0 or 255 for use_tracing
  • Python 3.10 which uses cframe
  • Python 3.9 and older
All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner
bpo-43760: Add PyThreadState_EnterTracing()
e388de9
Add PyThreadState_EnterTracing() and PyThreadState_LeaveTracing()
functions to the limited C API to suspend and resume tracing and
profiling.

Add an unit test on the PyThreadState C API to _testcapi.

Add also internal _PyThreadState_DisableTracing() and
_PyThreadState_ResetTracing().
@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

I'm not sure about PyThreadState_IsTracing(): I prefer to remove it for now.

Cython __Pyx_IsTracing() function checks 4 members:

  • PyThreadState.use_tracing
  • PyThreadState.tracing
  • PyThreadState.c_tracefunc
  • PyThreadState.c_profilefunc

I'm not sure why Cython checks use_tracing and again checks c_tracefunc and c_profilefunc. Maybe it's to handle the case when CYTHON_TRACE is set to 0 at build time. If it's the case, maybe testing CYTHON_TRACE could be differently, outside __Pyx_IsTracing().

  #define __Pyx_IsTracing(tstate, check_tracing, check_funcs) \
     (unlikely((tstate)->cframe->use_tracing) && \
         (!(check_tracing) || !(tstate)->tracing) && \
         (!(check_funcs) || (tstate)->c_profilefunc || (CYTHON_TRACE && (tstate)->c_tracefunc)))
All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner vstinner mentioned this pull request Oct 15, 2021
Profile.c uses PyThreadState_EnterTracing() cython/cython#4411
Merged
@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

And here is a draft PR for Cython: cython/cython#4411

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

And here is a draft PR for Cython: cython/cython#4411

On Python 3.11.0a2 with this PR, Cython no longer sets directly PyThreadState.cframe.use_tracing. But its __Pyx_IsTracing() macro still reads directly PyThreadState.cframe.use_tracing.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

Azure Pipelines PR: test_sendfile_close_peer_in_the_middle_of_receiving() failed on Windows x64.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner
vstinner merged commit 547d26a into python:main Oct 15, 2021
@bedevere-bot bedevere-bot removed the awaiting core review label Oct 15, 2021
@vstinner
vstinner deleted the tstate branch October 15, 2021 14:06
@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

I created a new PR in pythoncapi_compat to provide these new functions on Python 3.10 and older: python/pythoncapi-compat#13

I also removed PyThreadState_IsTracing(), final pythoncapi_compat change: python/pythoncapi-compat@10fde24

All reactions

Sorry, something went wrong.

Uh oh!

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

markshannon
markshannon reviewed Oct 15, 2021
View reviewed changes
Comment thread Include/internal/pycore_pystate.h
PyThreadState *tstate);

static inline void
_PyThreadState_DisableTracing(PyThreadState *tstate)

@markshannon markshannon Oct 15, 2021

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.

Could you rename this to "SuspendTracing" as it doesn't really disable it.

Sorry, something went wrong.

Uh oh!

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

All reactions

@vstinner vstinner Oct 15, 2021

Copy link
Copy Markdown
Member Author

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.

What I like in the internal C API is that we have a great freedom to change anything :-) Sure, I will write a PR to rename functions.

Sorry, something went wrong.

Uh oh!

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

All reactions

@gvanrossum gvanrossum Oct 15, 2021

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.

Hoe about Pause/Resume?

Sorry, something went wrong.

Uh oh!

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

All reactions

@vstinner vstinner Oct 15, 2021

Copy link
Copy Markdown
Member Author

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.

I did a quick Google search. It seems like "suspend" is usually used to "suspend a whole operating time", whereas there are debugger and profilers with a "pause" button and "pause profiling" sounds to be "commonly" used.

My vote goes to PauseTracing/ResumeTracing.

@markshannon: What is your last word on naming? :-)

Sorry, something went wrong.

Uh oh!

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

All reactions

@vstinner vstinner Oct 18, 2021

Copy link
Copy Markdown
Member Author

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.

I created #29032

Sorry, something went wrong.

Uh oh!

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

All reactions
markshannon
markshannon reviewed Oct 15, 2021
View reviewed changes
Comment thread Include/internal/pycore_pystate.h
}

static inline void
_PyThreadState_ResetTracing(PyThreadState *tstate)

@markshannon markshannon Oct 15, 2021

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.

Likewise this should be "ResumeTracing"

Sorry, something went wrong.

Uh oh!

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

All reactions
@markshannon

markshannon commented Oct 15, 2021

Copy link
Copy Markdown
Member

@vstinner Sorry my comments are a bit late. I hadn't realized you were going to merge this yet.

All reactions

Sorry, something went wrong.

Uh oh!

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

@vstinner

vstinner commented Oct 15, 2021

Copy link
Copy Markdown
Member Author

@vstinner Sorry my comments are a bit late. I hadn't realized you were going to merge this yet.

Well, the situation was stuck since last May. I would like to move on to unblock the issue.

I would like to test my recent C API changes on third party projects, but I'm blocked by Cython which is not compatible yet with the current Python main branch.

All reactions

Sorry, something went wrong.

Uh oh!

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

scoder pushed a commit to cython/cython that referenced this pull request Oct 18, 2021
@vstinner
Make Profile.c use PyThreadState_EnterTracing() (GH-4411)
cbddad2
Instead of __Pyx_SetTracing(), Profile.c now uses PyThreadState_EnterTracing() and PyThreadState_LeaveTracing(), which were added to Python 3.11.0a2:
python/cpython#28542

When these functions are used, Cython no longer sets directly PyThreadState.cframe.use_tracing.
@vstinner vstinner mentioned this pull request Oct 18, 2021
bpo-43760: Rename _PyThreadState_DisableTracing() #29032
Merged
0dminnimda added a commit to 0dminnimda/cython that referenced this pull request Oct 26, 2021
@0dminnimda
Squashed commit of the following:
7e9af23
commit 1461e51
Author: Stefan Behnel <[email protected]>
Date:   Mon Oct 25 14:29:02 2021 +0200

    Clean up the NumPy integration test by moving the doctests into the functions that they test.

commit 68bb716
Author: Stefan Behnel <[email protected]>
Date:   Mon Oct 25 14:14:24 2021 +0200

    Remove dead test code.

commit 4a74678
Author: Stefan Behnel <[email protected]>
Date:   Sun Oct 24 21:27:44 2021 +0200

    Use newer test dependencies in Py3.6+. (Excluding 3.10 for now to give the projects a bit more time.)

commit 9d1ffd5
Author: da-woods <[email protected]>
Date:   Sun Oct 24 23:13:50 2021 +0100

    Initial support for Python 3.11 (cythonGH-4414)

    * Add a basic replacement for PyCode_New().

    An optimized versions would be nice, but this is intended to work sufficiently to start testing. Also, CPython 3.11 might actually add a new C-API function to simplify setting the current code position. That might be used instead.

    * Disable introspection of frame object with vectorcall

    This feature looked to only be used for early Python versions that don't have the full vectorcall protocol (and the contents of the frame object are changed in Python 3.11).

commit 346c81f
Author: Stefan Behnel <[email protected]>
Date:   Sun Oct 24 21:18:10 2021 +0200

    Make sure that version dependent special methods are correctly and completely excluded via preprocessor guards.
    Previously, implementing "__div__" could fail in Py3 (if the code for adapting the Python wrapper was generated) or would at least generate C compiler warnings about unused "__div__" C functions.

commit 3748c3c
Author: Stefan Behnel <[email protected]>
Date:   Sun Oct 24 13:22:34 2021 +0200

    Add Py3.10 as CI test target.

commit 0f84a57
Author: Max Bachmann <[email protected]>
Date:   Sat Oct 23 22:06:37 2021 +0200

    Update incorrect version support comment for pycapsule.pxd (cythonGH-4426)

commit c25c87d
Author: Dobatymo <[email protected]>
Date:   Sat Oct 23 03:33:02 2021 +0800

    Fix libcpp map/set/multiset/unordered type issues (cythonGH-4410)

    Fix insert return types, constness and input iterator templates.
    Fix typing in iterators and add constructor to allow explicit conversion from iterator to const_iterator.

commit f776da0
Author: Dobatymo <[email protected]>
Date:   Sat Oct 23 03:28:53 2021 +0800

    Add C++ multimap/unordered_multimap (cythonGH-4419)

commit c83fd44
Author: 0dminnimda <[email protected]>
Date:   Fri Oct 22 21:44:11 2021 +0300

    Introduce new shell syntax for ci-run.sh to improve Windows support (cythonGH-4400)

commit c8c9a12
Merge: 174ca03 f53ac52
Author: Stefan Behnel <[email protected]>
Date:   Thu Oct 21 19:02:11 2021 +0200

    Merge branch '0.29.x'

commit f53ac52
Author: Stefan Behnel <[email protected]>
Date:   Tue May 25 11:20:54 2021 +0200

    docs: Use the Cython + IPython lexers that come with Pygments to avoid having to maintain our own ones.

commit 174ca03
Author: account-login <[email protected]>
Date:   Wed Oct 20 17:03:20 2021 +0800

    Add some missing functions to libcpp maps and string (cythonGH-4395)

    * add swap() to libcpp.string
    * add load_factor() to libcpp.unordered_map and libcpp.unordered_set

commit 42a4af2
Merge: 53b0eb2 fb5d29e
Author: Stefan Behnel <[email protected]>
Date:   Mon Oct 18 20:38:22 2021 +0200

    Merge branch '0.29.x'

commit fb5d29e
Author: da-woods <[email protected]>
Date:   Mon Oct 18 19:36:54 2021 +0100

    Fix tracing after adapting it to Py3.11 (cythonGH-4420)

commit 53b0eb2
Author: da-woods <[email protected]>
Date:   Mon Oct 18 19:36:54 2021 +0100

    Fix tracing after adapting it to Py3.11 (cythonGH-4420)

commit 5f820ed
Author: da-woods <[email protected]>
Date:   Mon Oct 18 11:10:05 2021 +0100

    Fix fused.__self__ tests on PyPy (cythonGH-4417)

    PyPy v7.3.6 looks to have added a helpful "did you mean..." to the AttributeError exception. It's currently tripping up these tests.

commit 4df1103
Merge: f6eeeda cbddad2
Author: Stefan Behnel <[email protected]>
Date:   Mon Oct 18 12:05:10 2021 +0200

    Merge branch '0.29.x'

commit cbddad2
Author: Victor Stinner <[email protected]>
Date:   Mon Oct 18 12:03:17 2021 +0200

    Make Profile.c use PyThreadState_EnterTracing() (cythonGH-4411)

    Instead of __Pyx_SetTracing(), Profile.c now uses PyThreadState_EnterTracing() and PyThreadState_LeaveTracing(), which were added to Python 3.11.0a2:
    python/cpython#28542

    When these functions are used, Cython no longer sets directly PyThreadState.cframe.use_tracing.

commit f6eeeda
Author: da-woods <[email protected]>
Date:   Sun Oct 17 19:01:52 2021 +0100

    Fix fused cpdef default arguments (cythonGH-4413)

    A couple of things were going wrong:
    * they're creating CloneNodes (but not requiring the contents of the clone of the clone node to be temp)
    * assignment from a clone node generates cleanup code (which is against the general rules of a clone node), and also loses a reference via giveref
    * cpdef functions cause a small memory leak (cython#4412) by assigning to their constants twice. This is unfortunately difficult to test for. With this patch we no longer leak, but still duplicate a little bit of work.

commit a0571a6
Author: da-woods <[email protected]>
Date:   Sun Oct 17 18:51:08 2021 +0100

    Import TextTestResult in test runner instead of _TextTestResult (cythonGH-4415)

    All the versions we currently test are new enough that the alias is no longer necessary.

commit c129b15
Author: Dobatymo <[email protected]>
Date:   Fri Oct 15 16:31:32 2021 +0800

    Fix wrong type in unordered_multiset::swap() (cythonGH-4408)

commit 72c18e7
Author: 0dminnimda <[email protected]>
Date:   Thu Oct 7 10:56:43 2021 +0300

    Improve ci-run.sh (cythonGH-4398)

commit 454a498
Author: da-woods <[email protected]>
Date:   Wed Oct 6 07:16:08 2021 +0100

    Improve "import_array" guard (cythonGH-4397)

    Stop using NPY_NDARRAYOBJECT_H since:
    a) in principle it's private
    b) Numpy has renamed it
    and use a public symbol instead.

    I think the existing tests are adequate - we just aren't yet testing
    against a new enough version of Numpy to have caught it yet.

    Closes cython#4396
    Closes cython#4394

commit 97c05e7
Author: Stefan Behnel <[email protected]>
Date:   Sat Oct 2 11:08:43 2021 +0200

    Make a compile test runnable.

commit 8c7b0f3
Author: da-woods <[email protected]>
Date:   Fri Oct 1 10:29:34 2021 +0100

    Handle function "outer_attrs" more consistently (cythonGH-4375)

    A few children of function nodes need to be consistently evaluated
    outside the function scope. This PR attempts to do so and thus
    fixes cython#4367.

commit 494f517
Author: da-woods <[email protected]>
Date:   Fri Oct 1 10:22:36 2021 +0100

    Change gcc version check in test runner to a numeric comparison (cythonGH-4359)

    The string comparison was reporting '11' < '4' (so OpenMP tests were being skipped on GCC 11)

commit cce3693
Author: Christian Clauss <[email protected]>
Date:   Wed Sep 29 09:49:45 2021 +0200

    Fix typo discovered by codespell (cython#4387)

commit daa0a44
Author: da-woods <[email protected]>
Date:   Tue Sep 28 08:48:12 2021 +0100

     Fix the name of attributes in the common ABI module  (cythonGH-4376)

    Attribute names used to be fully qualified like "_cython_3_0_0a9.cython_function_or_method" instead of the plain name.

    Closes cython#4373

commit fa8db66
Author: da-woods <[email protected]>
Date:   Mon Sep 27 10:11:12 2021 +0100

    Avoid AddTraceback() if stringtab isn't set up (cythonGH-4378)

    This can happen (rarely) with exceptions that occur very early in the module init process.

    Fixes cython#4377

    Uses a fake Numpy module for testing to make a version of "import_array" that always fails.

commit f94f26a
Author: da-woods <[email protected]>
Date:   Mon Sep 27 09:58:20 2021 +0100

    Make __Pyx_CoroutineAwaitType non-pickleable (cythonGH-4381)

    This is explicitly tested for: https://github.com/cython/cython/blob/aea4e6b84b38223c540266f8c57093ee2039f284/tests/run/test_coroutines_pep492.pyx#L2400

    It turns out some earlier versions of Python assume that
    C-API classes without a dict or slot are pickleable by the class
    name. Currently it isn't pickleable because the class name lookup
    is failing but this change makes it more robust.

    See cython#4376

commit 7403055
Author: da-woods <[email protected]>
Date:   Fri Sep 24 11:05:52 2021 +0100

    Avoid unnecessary binding of fused functions on class lookup (cythonGH-4370)

    Among other things this makes it pickleable by ensuring that it's the same object each time.

commit e2a23fe
Author: da-woods <[email protected]>
Date:   Mon Sep 20 08:34:34 2021 +0100

    Remove usused "FetchCommonPointer" utility code (cythonGH-4380)
@markshannon markshannon mentioned this pull request Sep 13, 2022
The DISPATCH() macro is not as efficient as it could be (move PyThreadState.use_tracing) #87926
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@gvanrossum gvanrossum gvanrossum left review comments
@markshannon markshannon markshannon left review comments

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.

7 participants

@vstinner @pablogsal @markshannon @gvanrossum @encukou @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.