MagicStack / MagicStack/uvloop
Segfault in uvloop 0.22.1
オープン
まだ誰も着手していません。
- 主要言語
- Cython
- スター
- 11.9k
- フォーク
- 615
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Hi, I see a sefault in uviloop in my fastapi app. I can reproduce it 100% of the time inside the container.
The app is run with
python -X faulthandler -m uvicorn --loop uvloop app:app
If I switch to --loop asyncio I do not get a segfault.
Fatal Python error: Segmentation fault
Thread 0x00007fb2e380f700 (most recent call first):
File "/opt/app-root/.pixi/envs/default/lib/python3.12/threading.py", line 359 in wait
File "/opt/app-root/.pixi/envs/default/lib/python3.12/threading.py", line 655 in wait
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/opentelemetry/sdk/_shared_internal/__init__.py", line 159 in worker
File "/opt/app-root/.pixi/envs/default/lib/python3.12/threading.py", line 1012 in run
File "/opt/app-root/.pixi/envs/default/lib/python3.12/threading.py", line 1075 in _bootstrap_inner
File "/opt/app-root/.pixi/envs/default/lib/python3.12/threading.py", line 1032 in _bootstrap
Current thread 0x00007fb74a920400 (most recent call first):
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/middleware/base.py", line 120 in wrap
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/middleware/base.py", line 125 in receive_or_disconnect
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/requests.py", line 228 in stream
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/fastapi/routing.py", line 373 in app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/fastapi/routing.py", line 106 in app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42 in wrapped_app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/fastapi/routing.py", line 120 in app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/routing.py", line 290 in handle
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/routing.py", line 736 in app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/routing.py", line 716 in __call__
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/fastapi/middleware/asyncexitstack.py", line 18 in __call__
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/_exception_handler.py", line 42 in wrapped_app
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/middleware/exceptions.py", line 63 in __call__
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette_exporter/middleware.py", line 405 in __call__
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/starlette/middleware/base.py", line 144 in coro
File "/opt/app-root/.pixi/envs/default/lib/python3.12/asyncio/runners.py", line 118 in run
File "/opt/app-root/.pixi/envs/default/lib/python3.12/asyncio/runners.py", line 195 in run
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/uvicorn/server.py", line 67 in run
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/uvicorn/main.py", line 593 in run
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/uvicorn/main.py", line 423 in main
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/click/core.py", line 824 in invoke
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/click/core.py", line 1269 in invoke
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/click/core.py", line 1406 in main
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/click/core.py", line 1485 in __call__
File "/opt/app-root/.pixi/envs/default/lib/python3.12/site-packages/uvicorn/__main__.py", line 4 in <module>
File "<frozen runpy>", line 88 in _run_code
File "<frozen runpy>", line 198 in _run_module_as_main
Extension modules: uvloop.loop, httptools.parser.parser, httptools.parser.url_parser, websockets.speedups, psutil._psutil_linux, _brotli, zstandard.backend_c, gssapi.raw._enum_extensions.ext_dce, gssapi.raw._enum_extensions.ext_iov_mic, gssapi.raw.oids, gssapi.raw.types, gssapi.raw.cython_converters, gssapi.raw.misc, gssapi.raw.names, gssapi.raw.creds, gssapi.raw.chan_bindings, gssapi.raw.sec_contexts, gssapi.raw.message, gssapi.raw.exceptions, gssapi.raw.ext_s4u, gssapi.raw.ext_cred_store, gssapi.raw.ext_rfc4178, gssapi.raw.ext_rfc5587, gssapi.raw.ext_rfc5588, gssapi.raw.ext_rfc5801, gssapi.raw.ext_cred_imp_exp, gssapi.raw.mech_krb5, gssapi.raw.ext_password, gssapi.raw.ext_password_add, gssapi.raw.ext_dce_aead, gssapi.raw.ext_dce, gssapi.raw.ext_iov_mic, gssapi.raw.ext_krb5, gssapi.raw.ext_rfc6680, gssapi.raw.ext_rfc6680_comp_oid, gssapi.raw.ext_ggf, gssapi.raw.ext_set_cred_opt, _cffi_backend, work._ruamel_yaml, _ruamel_yaml, multidict._multidict, yarl._quoting_c, propcache._helpers_c, aiohttp._http_writer, aiohttp._http_parser, aiohttp._websocket.mask, aiohttp._websocket.reader_c, frozenlist._frozenlist, numpy._core._multiarray_umath, numpy.linalg._umath_linalg, pyarrow.lib, sqlalchemy.cyextension.collections, sqlalchemy.cyextension.immutabledict, sqlalchemy.cyextension.processors, sqlalchemy.cyextension.resultproxy, sqlalchemy.cyextension.util, greenlet._greenlet, pyodbc, numpy.random._common, numpy.random.bit_generator, numpy.random._bounded_integers, numpy.random._pcg64, numpy.random._mt19937, numpy.random._generator, numpy.random._philox, numpy.random._sfc64, numpy.random.mtrand, pandas._libs.tslibs.ccalendar, pandas._libs.tslibs.np_datetime, pandas._libs.tslibs.dtypes, pandas._libs.tslibs.base, pandas._libs.tslibs.nattype, pandas._libs.tslibs.timezones, pandas._libs.tslibs.fields, pandas._libs.tslibs.timedeltas, pandas._libs.tslibs.tzconversion, pandas._libs.tslibs.timestamps, pandas._libs.properties, pandas._libs.tslibs.offsets, pandas._libs.tslibs.strptime, pandas._libs.tslibs.parsing, pandas._libs.tslibs.conversion, pandas._libs.tslibs.period, pandas._libs.tslibs.vectorized, pandas._libs.ops_dispatch, pandas._libs.missing, pandas._libs.hashtable, pandas._libs.algos, pandas._libs.interval, pandas._libs.lib, pyarrow._compute, pandas._libs.ops, pandas._libs.hashing, pandas._libs.arrays, pandas._libs.tslib, pandas._libs.sparse, pandas._libs.internals, pandas._libs.indexing, pandas._libs.index, pandas._libs.writers, pandas._libs.join, pandas._libs.window.aggregations, pandas._libs.window.indexers, pandas._libs.reshape, pandas._libs.groupby, pandas._libs.json, pandas._libs.parsers, pandas._libs.testing, pyarrow._feather, _cyutility, scipy._cyutility, scipy._lib._ccallback_c, scipy.sparse._sparsetools, _csparsetools, scipy.sparse._csparsetools, google._upb._message, confluent_kafka.cimpl (total: 117)
Segmentation fault (core dumped)
Environment (abridged)
arrow_odbc 7.0.4 py312h4413252_1
fastapi 0.124.2 hc0e8453_0
orjson 3.11.4 py312h868fb18_1
pyodbc 5.3.0 py312h1289d80_0
pytest 8.4.2 pyhcf101f3_1
pytest-asyncio 0.25.3 pyh29332c3_0
python 3.12.12 hd63d673_1_cpython
simdutf 5.4.15 h5888daf_0
sqlalchemy 2.0.45 py312h4c3975b_0
uvicorn 0.38.0 pyh31011fe_0
uvloop 0.22.1 py312h4c3975b_1
I wasn't able to get a coredump because I don't have access but could possibly get one if required.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、Python 3.12.12、uvloop 0.22.1、および python -X faulthandler -m uvicorn --loop uvloop app:app でクラッシュを再現し、その後 --loop asyncio と比較します。環境を絞り込み、可能であれば coredump を取得します。uvloop に関連する原因を特定し、同じアプリケーションで segfault が発生しなくなったことを確認できれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- backend, networking
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 静か
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 38/100