| route-pattern | /:user_id/:repository/pull/:id/commits/:range(.:format) |
| route-controller | pull_requests |
| route-action | commits |
| fetch-nonce | v2:d5bbce20-e107-ed66-6902-24854e652db2 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | CE0A:1E0640:334DF0B:4417F66:6A65422D |
| html-safe-nonce | a2e17951643bb3d89bc68cd3dcd439d5861ec80e59beb4de6bbe5f5a5be80d25 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDRTBBOjFFMDY0MDozMzRERjBCOjQ0MTdGNjY6NkE2NTQyMkQiLCJ2aXNpdG9yX2lkIjoiMzg3NDU0MDMyNzkzMzM5NTUwMSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | ee89fd4ec40b04223dc51664069d2a8afd84598e47cfd17eed13fb822fd01735 |
| hovercard-subject-tag | pull_request:3655997459 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | ///pull_requests/show/commits |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| twitter:image | https://avatars.githubusercontent.com/u/36009512?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/36009512?s=400&v=4 |
| og:image:alt | First step toward Python 3.14 free-threaded (Py_GIL_DISABLED) support, tracked under #2720 (and the umbrella #2610).
After this PR, pythonnet runs the full pytest suite on python3.14t against both ... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 52c76df668885aaff23b50bdca1fa1ea44ac9c1553e888ebc70ff1e4daa4625b |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/pythonnet/pythonnet git https://github.com/pythonnet/pythonnet.git |
| octolytics-dimension-user_id | 6050430 |
| octolytics-dimension-user_login | pythonnet |
| octolytics-dimension-repository_id | 14748123 |
| octolytics-dimension-repository_nwo | pythonnet/pythonnet |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 14748123 |
| octolytics-dimension-repository_network_root_nwo | pythonnet/pythonnet |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 309153364422b3c499922d1a2a6404910a58ed8e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
| Skip to content | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c#start-of-content |
|
| https://github.com/ |
|
Sign in
| https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpythonnet%2Fpythonnet%2Fpull%2F2721%2Fcommits%2F99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| GitHub CopilotWrite better code with AI | https://github.com/features/copilot |
| GitHub Copilot appDirect agents from issue to merge | https://github.com/features/ai/github-app |
| MCP RegistryNewIntegrate external tools | https://github.com/mcp |
| ActionsAutomate any workflow | https://github.com/features/actions |
| CodespacesInstant dev environments | https://github.com/features/codespaces |
| IssuesPlan and track work | https://github.com/features/issues |
| Code ReviewManage code changes | https://github.com/features/code-review |
| Code QualityEnforce quality at merge | https://github.com/features/code-quality |
| GitHub Advanced SecurityFind and fix vulnerabilities | https://github.com/security/advanced-security |
| Code securitySecure your code as you build | https://github.com/security/advanced-security/code-security |
| Secret protectionStop leaks before they start | https://github.com/security/advanced-security/secret-protection |
| Why GitHub | https://github.com/why-github |
| Documentation | https://docs.github.com |
| Blog | https://github.blog |
| Changelog | https://github.blog/changelog |
| Marketplace | https://github.com/marketplace |
| View all features | https://github.com/features |
| Enterprises | https://github.com/enterprise |
| Small and medium teams | https://github.com/team |
| Startups | https://github.com/enterprise/startups |
| Nonprofits | https://github.com/solutions/industry/nonprofits |
| App Modernization | https://github.com/solutions/use-case/app-modernization |
| DevSecOps | https://github.com/solutions/use-case/devsecops |
| DevOps | https://github.com/solutions/use-case/devops |
| CI/CD | https://github.com/solutions/use-case/ci-cd |
| View all use cases | https://github.com/solutions/use-case |
| Healthcare | https://github.com/solutions/industry/healthcare |
| Financial services | https://github.com/solutions/industry/financial-services |
| Manufacturing | https://github.com/solutions/industry/manufacturing |
| Government | https://github.com/solutions/industry/government |
| View all industries | https://github.com/solutions/industry |
| View all solutions | https://github.com/solutions |
| AI | https://github.com/resources/articles?topic=ai |
| Software Development | https://github.com/resources/articles?topic=software-development |
| DevOps | https://github.com/resources/articles?topic=devops |
| Security | https://github.com/resources/articles?topic=security |
| View all topics | https://github.com/resources/articles |
| Customer stories | https://github.com/customer-stories |
| Events & webinars | https://github.com/resources/events |
| Ebooks & reports | https://github.com/resources/whitepapers |
| Business insights | https://github.com/solutions/executive-insights |
| GitHub Skills | https://skills.github.com |
| Documentation | https://docs.github.com |
| Customer support | https://support.github.com |
| Community forum | https://github.com/orgs/community/discussions |
| Trust center | https://github.com/trust-center |
| Partners | https://github.com/partners |
| View all resources | https://github.com/resources |
| GitHub SponsorsFund open source developers | https://github.com/open-source/sponsors |
| Security Lab | https://securitylab.github.com |
| Maintainer Community | https://maintainers.github.com |
| Accelerator | https://github.com/open-source/accelerator |
| GitHub Stars | https://stars.github.com |
| Archive Program | https://archiveprogram.github.com |
| Topics | https://github.com/topics |
| Trending | https://github.com/trending |
| Collections | https://github.com/collections |
| Enterprise platformAI-powered developer platform | https://github.com/enterprise |
| GitHub Advanced SecurityEnterprise-grade security features | https://github.com/security/advanced-security |
| Copilot for BusinessEnterprise-grade AI features | https://github.com/features/copilot/copilot-business |
| Premium SupportEnterprise-grade 24/7 support | https://github.com/enterprise/premium-support |
| Pricing | https://github.com/pricing |
| Search syntax tips | https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax |
| documentation | https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax |
|
Sign in
| https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fpythonnet%2Fpythonnet%2Fpull%2F2721%2Fcommits%2F99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
Sign up
| https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Fcommits&source=header-repo&source_repo=pythonnet%2Fpythonnet |
| Reload | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| Reload | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| Reload | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
pythonnet
| https://github.com/pythonnet |
| pythonnet | https://github.com/pythonnet/pythonnet |
|
Notifications
| https://github.com/login?return_to=%2Fpythonnet%2Fpythonnet |
|
Fork
777
| https://github.com/login?return_to=%2Fpythonnet%2Fpythonnet |
|
Star
5.5k
| https://github.com/login?return_to=%2Fpythonnet%2Fpythonnet |
|
Code
| https://github.com/pythonnet/pythonnet |
|
Issues
151
| https://github.com/pythonnet/pythonnet/issues |
|
Pull requests
17
| https://github.com/pythonnet/pythonnet/pulls |
|
Discussions
| https://github.com/pythonnet/pythonnet/discussions |
|
Actions
| https://github.com/pythonnet/pythonnet/actions |
|
Projects
| https://github.com/pythonnet/pythonnet/projects |
|
Wiki
| https://github.com/pythonnet/pythonnet/wiki |
|
Security and quality
0
| https://github.com/pythonnet/pythonnet/security |
|
Insights
| https://github.com/pythonnet/pythonnet/pulse |
|
Code
| https://github.com/pythonnet/pythonnet |
|
Issues
| https://github.com/pythonnet/pythonnet/issues |
|
Pull requests
| https://github.com/pythonnet/pythonnet/pulls |
|
Discussions
| https://github.com/pythonnet/pythonnet/discussions |
|
Actions
| https://github.com/pythonnet/pythonnet/actions |
|
Projects
| https://github.com/pythonnet/pythonnet/projects |
|
Wiki
| https://github.com/pythonnet/pythonnet/wiki |
|
Security and quality
| https://github.com/pythonnet/pythonnet/security |
|
Insights
| https://github.com/pythonnet/pythonnet/pulse |
| Sign up for GitHub
| https://github.com/signup?return_to=%2Fpythonnet%2Fpythonnet%2Fissues%2Fnew%2Fchoose |
| terms of service | https://docs.github.com/terms |
| privacy statement | https://docs.github.com/privacy |
| Sign in | https://github.com/login?return_to=%2Fpythonnet%2Fpythonnet%2Fissues%2Fnew%2Fchoose |
| greateggsgreg | https://github.com/greateggsgreg |
| pythonnet:master | https://github.com/pythonnet/pythonnet/tree/master |
| greateggsgreg:freethreading-prep | https://github.com/greateggsgreg/pythonnet/tree/freethreading-prep |
|
Conversation
1
| https://github.com/pythonnet/pythonnet/pull/2721 |
|
Commits
37
| https://github.com/pythonnet/pythonnet/pull/2721/commits |
|
Checks
33
| https://github.com/pythonnet/pythonnet/pull/2721/checks |
|
Files changed
| https://github.com/pythonnet/pythonnet/pull/2721/files |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
Python 3.14 free-threaded support
| https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c#top |
|
Show all changes
37 commits
| https://github.com/pythonnet/pythonnet/pull/2721/files |
|
ebd0a95
Thread-safety prep for free-threading builds
greateggsgreg May 9, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/ebd0a95717fb69cb1fa274230b497807a06c8138 |
|
cf8372a
Initialise pythonnet on free-threaded Python (#2720)
greateggsgreg May 9, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/cf8372ad89d6cdf61829c7bf5142d16dd0cd426c |
|
441954f
Make extension/CLR-object registries thread-safe
greateggsgreg May 9, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/441954f7e589554c988ce1f7026115bcc88ad41b |
|
19c7f59
Atomic type creation in ReflectedClrType.GetOrCreate / TypeManager.Ge…
greateggsgreg May 9, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/19c7f591be318824450ebd89d949d4db99f3f2f5 |
|
1029c62
Add free-threaded thread-stress tests and 3.14t to CI matrix
greateggsgreg May 9, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/1029c62c72f4a048d630477e573bbc177142af78 |
|
3158ca5
Atomic GCHandle ownership and finalizer-thread shutdown guards
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/3158ca5a57de6277296f67604fc0056b915e31b7 |
|
1149295
Make additional internal registries thread-safe
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/11492952e27bab10d51919a9c0673e223b16a44d |
|
e8afa85
test_thread: join worker threads before returning
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/e8afa853766973f5a2c948cc5dd445a46689b987 |
|
3954df3
test_thread: cover ModuleObject thread-safe registries
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/3954df302a7a01480acfc78406430fddf9c0c3ef |
|
28013af
Wider thread-safety audit fixes for free-threaded Python
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/28013af87cf80112e872bf95730ff4d6df03fa2b |
|
9a3dd59
Document lock acquisition sites and strong->weak GCHandle swap
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/9a3dd59bb7e0d02ffe476fdebc37c1344804da48 |
|
cb1dcde
Preserve InternString single-write invariant under DEBUG
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/cb1dcde69dbbdfa4f1e122ea1f214dda3e7caffd |
|
74d12f1
test_thread: cover real-world consumer patterns
greateggsgreg May 10, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/74d12f14298d602510b15fc8881f0a626ea41abb |
|
a30c84e
Auto-detect free-threaded libpython in venv home
greateggsgreg May 12, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/a30c84ec7fa70a3d9f6a3c59f6d7f0d67d77dde3 |
|
be5ba34
Snapshot pypath, use ConcurrentDictionary for thunks and slot holders
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/be5ba3473218927187d278f2b24877bee3165266 |
|
946785e
Fix handling of python runtime suffixes m/t
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/946785e9c09707aa235b04110f9e6fe2f272b258 |
|
77ca497
Fix threadtest race
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/77ca4972edbefabec8e76beb56fff09f3e1000e6 |
|
af518bb
Fix double-free in chained ClassDerived Finalize
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/af518bb57bfc5f3eaf0529a20b1f7d716112e8ff |
|
ed735ac
Enable Mono CI jobs on free-threaded Python 3.14
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/ed735ac587ad1847c9a2d90643c31a138f138cb0 |
|
bd3f0bf
Inline freethreaded_only as pytest.mark.skipif at call sites
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/bd3f0bfef07a01f4b8120b117507fc68ddefc461 |
|
c4688b3
Fix InterruptTest assertion on free-threaded Python 3.14
greateggsgreg May 13, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/c4688b39676d74442154806b909810aa93461b3d |
|
84cd07c
Add concurrent stress tests for PyBuffer.Dispose and CLR-cycle gc.col…
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/84cd07cebb327ff1a68272adc6e0a61db9c55e3f |
|
d9b658d
Trim concurrent overhead on hot paths from free-threading prep
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/d9b658dc283c3a9a5f291eac06730161d123e1d4 |
|
20c51ad
Pre-warm ctor binder in concurrent-gc test to avoid first-call race
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/20c51ad560ec5af4dddcf8b1dee5bf25e3cd7161 |
|
f5f8ab0
Make MethodBinder.GetMethods lazy init thread-safe under free-threading
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/f5f8ab0dd32abcbd992a19d86d742aaf012ef3ea |
|
c5097eb
Precompute method precedence to avoid quadratic GetParameters allocat…
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/c5097ebaf563ccbf0196e5acab30a6a55b1bef7b |
|
18e4901
Zero the slot in ClassDerived.tp_dealloc when tp_clear already ran to…
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/18e4901b6f329afe4d0a35be86bc702e8c95b46a |
|
e0569d0
Keep ClassDerived wrapper alive across the NewObjectToPython slot dem…
greateggsgreg May 15, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/e0569d0f46a05f3c91517867a9fad1d719e35abb |
|
2c9f861
Document private helpers added during free-threading prep
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/2c9f861ed2be795a57a861b356a63b44f1c1aae6 |
|
ee3add4
Add debug echoes and a 6-minute step timeout to the Mono test job
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/ee3add404dbc34ddf6a7d84c7351884a811e6c99 |
|
414ce70
Drop the per-loop CLR GC.Collect from concurrent-gc test to avoid Mon…
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/414ce700d6e127e6f769f95105e7bec503614baa |
|
99a99db
Add temporary Mono-step diagnostics on Linux/macOS to locate the x64-…
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
8e7c2ba
Revert temporary Mono-step diagnostics now that the underlying race i…
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/8e7c2bac47579bcbcc0cdca997ab6d8850424ae0 |
|
f8b69a2
Merge branch 'master' into freethreading-prep
greateggsgreg May 16, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/f8b69a21cb12c6ac0a01c66c4e1165e7cbaf2afa |
|
8f2804c
Add user-facing threading guide covering GIL, free-threading, and com…
greateggsgreg May 18, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/8f2804ca6498f2d152cf1a3ed864526554220413 |
|
9c369ed
Harden CollectBasicObject against .NET-GC timing differences
greateggsgreg May 18, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/9c369edb84e5d9b110aaa2ab0b2d6eeb7208238a |
|
d1b4daa
Merge branch 'master' into freethreading-prep
greateggsgreg May 25, 2026
| https://github.com/pythonnet/pythonnet/pull/2721/commits/d1b4daae358028400bfe95a4ef356717f07637a4 |
|
Clear filters
| https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
Prev
| https://github.com/pythonnet/pythonnet/pull/2721/commits/414ce700d6e127e6f769f95105e7bec503614baa |
|
Next
| https://github.com/pythonnet/pythonnet/pull/2721/commits/8e7c2bac47579bcbcc0cdca997ab6d8850424ae0 |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
| https://github.com/greateggsgreg |
| greateggsgreg | https://github.com/pythonnet/pythonnet/commits?author=greateggsgreg |
| .github/workflows/main.yml | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c#diff-7829468e86c1cc5d5133195b5cb48e1ff6c75e3e9203777f6b2e379d9e4882b3 |
|
View file
| https://github.com/pythonnet/pythonnet/blob/99a99db0646cc5e81a74074eadeb67d16a9fa99c/.github/workflows/main.yml |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/pythonnet/pythonnet/pull/2721/commits/{{ revealButtonHref }} |
|
| https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c#diff-7829468e86c1cc5d5133195b5cb48e1ff6c75e3e9203777f6b2e379d9e4882b3 |
|
| https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c#diff-7829468e86c1cc5d5133195b5cb48e1ff6c75e3e9203777f6b2e379d9e4882b3 |
| Please reload this page | https://github.com/pythonnet/pythonnet/pull/2721/commits/99a99db0646cc5e81a74074eadeb67d16a9fa99c |
|
| https://github.com |
| Terms | https://docs.github.com/site-policy/github-terms/github-terms-of-service |
| Privacy | https://docs.github.com/site-policy/privacy-policies/github-privacy-statement |
| Security | https://github.com/security |
| Status | https://www.githubstatus.com/ |
| Community | https://github.community/ |
| Docs | https://docs.github.com/ |
| Contact | https://support.github.com?tags=dotcom-footer |