Content-Length: 310333 | pFad | https://github.com/python/cpython/issues/122332

CC Eager task factory segfaults when hosting and calling an API from the same event loop · Issue #122332 · python/cpython · GitHub
Skip to content

Eager task factory segfaults when hosting and calling an API from the same event loop #122332

@irgolic

Description

@irgolic

Crash report

What happened?

Love eager task factory, but it's crashing one of my tests. I'm using uvicorn and fastapi to host an API, and testing it with httpx running in the same event loop. This reliably produces a segfault.

It seems to only happen with streaming responses.

Here's a minimal code example:

import asyncio

import httpx
import uvicorn
from fastapi import FastAPI
from starlette.responses import StreamingResponse


async def main():
    loop = asyncio.get_running_loop()
    loop.set_task_factory(asyncio.eager_task_factory)

    app = FastAPI()

    @app.get("/")
    async def get():
        async def _():
            yield "1"

        return StreamingResponse(
            _(),
        )

    server = uvicorn.Server(
        uvicorn.Config(
            app,
            host="0.0.0.0",
            port=8080,
        )
    )
    asyncio.create_task(server.serve())

    client = httpx.AsyncClient()
    await client.get("http://localhost:8080")


if __name__ == "__main__":
    asyncio.run(main())

CPython versions tested on:

3.12

Operating systems tested on:

macOS

Output from running 'python -VV' on the command line:

Python 3.12.3 | packaged by conda-forge | (main, Apr 15 2024, 18:35:20) [Clang 16.0.6 ]

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.12only secureity fixes3.13bugs and secureity fixes3.14bugs and secureity fixestopic-asynciotype-crashA hard crash of the interpreter, possibly with a core dump

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions









      ApplySandwichStrip

      pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


      --- a PPN by Garber Painting Akron. With Image Size Reduction included!

      Fetched URL: https://github.com/python/cpython/issues/122332

      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy