Skip to content

core: Avoid spawning waiter goroutines when QUIC worker pool is full#7927

Merged
yongtang merged 2 commits into
coredns:masterfrom
yongtang:quic-fix
Mar 16, 2026
Merged

core: Avoid spawning waiter goroutines when QUIC worker pool is full#7927
yongtang merged 2 commits into
coredns:masterfrom
yongtang:quic-fix

Conversation

@yongtang

Copy link
Copy Markdown
Member

1. Why is this pull request needed and what does it do?

When streamProcessPool is full, serveQUICConnection() currently spawns a goroutine that waits for a worker token. Under load this can create a large backlog of goroutines waiting on the pool.

This change removes the waiter goroutine and instead blocks in the connection loop until a worker slot becomes available or the connection context is canceled.

2. Which issues (if any) are related?

n/a

3. Which documentation changes (if any) need to be made?

n/a

4. Does this introduce a backward incompatible change or deprecation?

n/a

When streamProcessPool is full, serveQUICConnection() currently spawns a goroutine that waits for a worker token. Under load this can create a large backlog of goroutines waiting on the pool.

This change removes the waiter goroutine and instead blocks in the connection loop until a worker slot becomes available or the connection context is canceled.

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>

@thevilledev thevilledev left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! The blocking approach here aligns well with the other server implementations do it. Both HTTPS and gRPC block their accept loops via netutil.LimitListener rather than spawning waiters (see GHSA-527x-5wrf-22m2). The current QUIC code was the outlier in that regard.

@yongtang yongtang merged commit 5bbe053 into coredns:master Mar 16, 2026
11 checks passed
@yongtang yongtang deleted the quic-fix branch March 18, 2026 18:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants