Skip to content

Bump soar to v0.2.4 and kindling: stop leaking Soar streams - #700

Merged
myleshorton merged 1 commit into
mainfrom
fisk/soar-stream-leak
Oct 22, 2026
Merged

myleshorton merged 1 commit into
mainfrom
fisk/soar-stream-leak

Conversation

@myleshorton

@myleshorton myleshorton commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This bumps soar to v0.2.4 and kindling to 48c13b1. Together they fix a stream leak that permanently broke Soar on a long-running client.

What happened in the field: one Windows client on 10.0.3-beta-10 failed every Soar attempt about 1,800 times over two days with soar: too many streams.

  • Soar's round tripper held the stream its connect phase confirmed until a request took it.
  • kindling dropped round trippers that connected after the race was decided, or that waited behind the winning request, without closing them.
  • Unbounded's signaling polls to freddie.iantem.io run every ~14 s, and Soar often loses those races after connecting, so each lost race leaked one stream.
  • The open streams kept the session from looking idle, so it was never retired. After 64 leaks (the default), every Soar dial failed instantly until the app restarted.

The new vcs.ref.head.revision attribute (#691) is what tied the spike to beta 10 and to one device.

Changes

Either dependency fix alone stops the leak. radiance passes *soar.Client straight to kindling.WithDNSTunnel (kindling/client.go:288), so kindling gets Soar's closable round tripper unwrapped. Only go.mod and go.sum change, after go mod tidy.

Verification

  • go test -tags with_clash_api ./kindling/... ./telemetry/ passes.
  • go build -tags with_clash_api ./... fails only in cmd/lantern (the ipc.NewClient signature), which also fails on main.
  • The full suite passes except two config tests, TestUserChangeSkipsConfigFetchWithoutCredentials and TestInitialAccountEventDoesNotLoopConfigCreation, which fail the same way locally on main.

Pre-PR review (local Codex gate)

  • Rounds: 1. Final: CODEX GATE: verdict=approve critical=0 important=0 minor=0 reviewed=20
  • Exit: approve. Besides the diff, the reviewer read radiance's kindling/client.go, race.go, soar/soar.go, smart/client.go and fronted/fronted.go, both versions of soar's roundtripper.go and kindling's race_transport.go, and domainfront's connected.go.
  • Fixed: none
  • Dismissed: none

🤖 Generated with Claude Code

https://claude.ai/code/session_01QQFpfCXs3JqrfyDuiGabF5

Summary by CodeRabbit

  • Chores
    • Updated underlying components. The summary does not describe any changes to app features or behavior, or identify any other user-facing changes.

Soar's round tripper held a confirmed stream until a request took it,
and kindling dropped the round trippers that lost a race without
closing them. On a client that kept losing short races, every stream
leaked and Soar failed with "soar: too many streams" until restart.

soar v0.2.4 (getlantern/soar#15) makes the round tripper closable and
expires an unused stream after 10 s. kindling 48c13b1
(getlantern/kindling#61) closes every round tripper a race doesn't use.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QQFpfCXs3JqrfyDuiGabF5
Copilot AI balanced review requested due to automatic review settings October 22, 2026 16:10
@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b2e5cade-b01f-40d2-a380-3866657856a2
📥 Commits

Reviewing files that changed from the base of the PR and between be1d096 and ba2e95f.

⛔ Files ignored due to path filters: 1
  • go.sum is excluded by !**/*.sum
📒 Files selected for processing: 1
  • go.mod

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Walkthrough

The pull request updates the required versions of github.com/getlantern/kindling and github.com/getlantern/soar in go.mod.

Changes: Dependency updates

Layer / File(s) Summary
Kindling and Soar version updates
go.mod
Updates kindling from v0.0.0-20261014210827-0f4a89dbe1ee to v0.0.0-20261022160625-48c13b1454d3, and soar from v0.2.3 to v0.2.4.

Priority: ➖ Normal

Estimated code review effort: 1 (Trivial) | ~3 minutes

Change: Bug fix

Possibly related PRs

Suggested reviewers: garmr-ulfr

Merge Risk: ⚪ Minimal · up to ba2e9

The dependency updates are consistent and address the reported stream leak without an established merge-blocking issue.

Pre-merge checks: Passed 5
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly identifies both dependency upgrades and states the main purpose: preventing leaked Soar streams.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approved

The dependency fixes fit Radiance’s existing transport integration, with no blocking issues identified.

No open issues 🎉

What changed in this PR

Updates Soar and kindling to fix unused stream leaks that could exhaust Soar sessions and prevent connections until the client restarted.

Changes:

  • Bumps Soar to v0.2.4, adding cleanup for unused streams.
  • Bumps kindling to 48c13b1454d3, closing connected round trippers that lose transport races.
  • Updates the corresponding dependency checksums; no Radiance application code changes.
File Description
go.sum Updates checksums for the two dependency revisions.
go.mod Pins Soar and kindling versions containing the cleanup fixes.

Review effort: Balanced

@myleshorton
myleshorton merged commit 5bff222 into main Oct 22, 2026
5 checks passed
@myleshorton
myleshorton deleted the fisk/soar-stream-leak branch October 22, 2026 16:20
myleshorton added a commit to getlantern/lantern that referenced this pull request Oct 22, 2026
radiance 5bff222 brings soar v0.2.4 and kindling 48c13b1
(getlantern/radiance#700). A round tripper that lost a race kept its
Soar stream open, so a client that kept losing short races eventually
failed every Soar attempt with "soar: too many streams" until restart.

The range also brings getlantern/radiance#698 (peer helper direct mode).


Claude-Session: https://claude.ai/code/session_01QQFpfCXs3JqrfyDuiGabF5

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
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