Title: Data race in test_ssl.test_sni_callback_race · Issue #150191 · python/cpython · GitHub
Open Graph Title: Data race in test_ssl.test_sni_callback_race · Issue #150191 · python/cpython
X Title: Data race in test_ssl.test_sni_callback_race · Issue #150191 · python/cpython
Description: Bug report There is a sporadic thread sanitizer reported data race in a newly added test GH-150018 For example: https://github.com/python/cpython/actions/runs/26217633343/job/77144045276 Here is a summary from Claude with my edits: On th...
Open Graph Description: Bug report There is a sporadic thread sanitizer reported data race in a newly added test GH-150018 For example: https://github.com/python/cpython/actions/runs/26217633343/job/77144045276 Here is a ...
X Description: Bug report There is a sporadic thread sanitizer reported data race in a newly added test GH-150018 For example: https://github.com/python/cpython/actions/runs/26217633343/job/77144045276 Here is a ...
Opengraph URL: https://github.com/python/cpython/issues/150191
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Data race in test_ssl.test_sni_callback_race","articleBody":"# Bug report\n\nThere is a sporadic thread sanitizer reported data race in a newly added test\n\n* GH-150018\n\nFor example:\n\n* https://github.com/python/cpython/actions/runs/26217633343/job/77144045276\n\nHere is a summary from Claude with my edits:\n\n-------\n\nOn the free-threaded TSAN build, `test.test_ssl.ContextTests.test_sni_callback_race` sporadically reports a data race inside OpenSSL: one thread reads an ASN.1 string via `ASN1_STRING_cmp` (no lock held) while another writes the same heap block via `ASN1_STRING_set` (holding an internal `CRYPTO_THREAD_lock` rwlock). The test itself does not crash.\n\n### Reproducer\n\n```bash\nCC=clang-20 ./configure -C --disable-gil --with-pydebug --with-thread-sanitizer\nmake -j\n\nfor i in $(seq 1 30); do\n TSAN_OPTIONS=\"halt_on_error=1\" \\\n ./python -m test test_ssl -v -m test_sni_callback_race \u003e /tmp/run_$i.log 2\u003e\u00261\n [ $? -ne 0 ] \u0026\u0026 echo \"FAILED on run $i\" \u0026\u0026 break\ndone\n```\n\nReproduces within ~15 runs on a 22-core machine.\n\n### TSAN report (abridged)\n\n```\nWARNING: ThreadSanitizer: data race\n\n Read of size 8 by thread T11:\n #0 memcmp\n #1 ASN1_STRING_cmp (libcrypto.so.3)\n ...\n #22 thread_run Modules/_threadmodule.c:388\n\n Previous write of size 8 by thread T12 (mutexes: write M0):\n #0 memcpy\n #1 ASN1_STRING_set (libcrypto.so.3)\n ...\n #22 thread_run Modules/_threadmodule.c:388\n\n Location is heap block of size 21 allocated by ASN1_STRING_set\n Mutex M0 created by CRYPTO_THREAD_lock_new (libcrypto.so.3)\n\nSUMMARY: ThreadSanitizer: data race in memcmp\n```\n\nThe writer holds an OpenSSL-owned rwlock; the reader does not take the same lock. Both call sites enter from two Python worker threads doing concurrent SSL handshakes on the same `SSLContext`.\n\n## Environment\n\n- CPython `main` @ c35b0f2b624 (3.16.0a0, free-threading debug TSAN)\n- Clang 20.1.8\n- OpenSSL 3.0.13 (30 Jan 2024)\n- Linux 6.8.0-101 x86_64\n\ncc @kiri11 @encukou \n\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-150193\n* gh-153269\n* gh-153270\n* gh-153320\n* gh-153349\n* gh-153350\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/colesbury","@type":"Person","name":"colesbury"},"datePublished":"2026-05-21T14:34:05.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/150191/cpython/issues/150191"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:bdfa9c2a-14ee-05db-8357-ab3cd63cf010 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B0D2:7C22D:11034D4:1713554:6A507BD4 |
| html-safe-nonce | e57c3f96dd986359f007a8034817a1cca870dcb6ec6b285043ebb956d756deb0 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMEQyOjdDMjJEOjExMDM0RDQ6MTcxMzU1NDo2QTUwN0JENCIsInZpc2l0b3JfaWQiOiI2Njc5MjA0MzY1MDcxMzE3OTcyIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | b6b8453cc5abcd9f9226ec3b58a9834bf9f7be9a68f1aa68f20cb8420d4e3205 |
| hovercard-subject-tag | issue:4495402705 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/150191/issue_layout |
| twitter:image | https://opengraph.githubassets.com/0ef07652dbfcc03f98f13a6bccace8910de44dc73e6a654e95511bbc9c73b8ad/python/cpython/issues/150191 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/0ef07652dbfcc03f98f13a6bccace8910de44dc73e6a654e95511bbc9c73b8ad/python/cpython/issues/150191 |
| og:image:alt | Bug report There is a sporadic thread sanitizer reported data race in a newly added test GH-150018 For example: https://github.com/python/cpython/actions/runs/26217633343/job/77144045276 Here is a ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | colesbury |
| hostname | github.com |
| expected-hostname | github.com |
| None | d6dc8294eb500fa36bbc57472d61fe87c522f9c3c1d64f70f4926f66a66a7efb |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| 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 | 7ac0ad2f2c7e4b9056617355fd9e33e22b0c8df9 |
| ui-target | canary-2 |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width