Skip to content

Repeated calls to the same async fn can cause stack overflow #132050

Open
@xmh0511

Description

@xmh0511

I tried this code:

#[tokio::main]
async fn main() {
    test_buf().await;
    test_buf().await;
    test_buf().await;
    // ... Execute n times, do not use for loop
}
async fn test_buf(){
    let buf = [0;65536];
    test_buf0(&buf).await;
}
async fn test_buf0(_buf:&[u8]){}

I expected to see this code can work

Instead, this happened:

fatal runtime error: stack overflow

rustc --version --verbose:

rustc 1.82.0 (f6e511eec 2024-10-15)
binary: rustc
commit-hash: f6e511eec7342f59a25f7c0534f1dbea00d01b14
commit-date: 2024-10-15
host: x86_64-apple-darwin
release: 1.82.0
LLVM version: 19.1.1

This issue can also be directly reproduced on playground, since the stack size on Linux is larger than that on Windows, the n times that can reproduce the issue is greater than that on Windows

Exited with signal 6 (SIGABRT): abort program

Standard Error

   Compiling playground v0.0.1 (/playground)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.38s
     Running `target/debug/playground`

thread 'main' has overflowed its stack
fatal runtime error: stack overflow

The tokio side think this should be a bug of the compiler, tokio-rs/tokio#5909

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-async-awaitArea: Async & AwaitC-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions