Skip to content

fix(buffer): wait for active I/O before closing#2825

Merged
PIKACHUIM merged 4 commits into
mainfrom
fix-2823
Jul 23, 2026
Merged

fix(buffer): wait for active I/O before closing#2825
PIKACHUIM merged 4 commits into
mainfrom
fix-2823

Conversation

@jyxjjj

@jyxjjj jyxjjj commented Jul 23, 2026

Copy link
Copy Markdown
Member

Summary / 摘要

  • Prevent PipeBuffer.Close from returning while ReadAt or WriteAt operations are still using the backing block.

  • Reject new I/O during close and wait for in-flight operations before the downloader releases its mmap-backed cache.

  • Add deterministic concurrent close regression tests covering both reads and writes.

  • Preserve the existing concurrent reader and writer behavior without changing public APIs or configuration.

  • This PR has breaking changes.
    / 此 PR 包含破坏性变更。

  • This PR changes public API, config, storage format, or migration behavior.
    / 此 PR 修改了公开 API、配置、存储格式或迁移行为。

  • This PR requires corresponding changes in related repositories.
    / 此 PR 需要关联仓库同步修改。

Related Issues / 关联 Issue

Fixes #2823

Testing / 测试

  • go test ./...
  • go test -race ./pkg/buffer
  • go vet ./pkg/buffer
  • go test ./internal/net -run '^(TestDownloadOrder|TestDownloadInterrupt|TestHighConcurrency|TestDownloadSingle)$'
  • Manual test / 手动测试: Not run; the race is covered by deterministic concurrent close tests.

The full go test ./internal/net command was also attempted. The unrelated TestNewOSSClientUsesEnvironmentHTTPSProxy test failed because it expected *http.Transport but received *net.safeTransport; the downloader-specific tests passed when run directly.

Checklist / 检查清单

  • I have read CONTRIBUTING.
    / 我已阅读 CONTRIBUTING
  • I confirm this contribution follows the repository license, contribution policy, and code of conduct.
    / 我确认此贡献符合仓库许可证、贡献规范和行为准则。
  • I have formatted the changed code with gofmt, go fmt, or prettier where applicable.
    / 我已按适用情况使用 gofmtgo fmtprettier 格式化变更代码。
  • I have requested review from relevant maintainers or code owners where applicable.
    / 我已在适用情况下请求相关维护者或代码所有者审查。

AI Disclosure / AI 使用声明

  • This PR includes AI-assisted content.
    / 此 PR 包含 AI 辅助内容。

Tools used / 使用工具:

  • ChatGPT
  • Codex
  • GitHub Copilot
  • Claude
  • Gemini
  • Other (please specify) / 其他(请注明):

Usage scope / 使用范围:

  • Code generation / 代码生成

  • Refactoring / 重构

  • Documentation / 文档

  • Tests / 测试

  • Translation / 翻译

  • Review assistance / 审查辅助

  • I have reviewed and validated all AI-assisted content included in this PR.
    / 我已审核并验证此 PR 中的所有 AI 辅助内容。

  • I have ensured that all AI-assisted commits include Co-Authored-By attribution.
    / 我已确保所有 AI 辅助提交都包含 Co-Authored-By 归属信息。

  • I can reproduce all AI-assisted content included in this PR without any AI tools.
    / 我可以在没有任何 AI 工具的情况下重现此 PR 中包含的所有 AI 辅助内容。

- Track in-flight PipeBuffer read and write operations
- Wait for active I/O before releasing backing storage
- Add concurrent close regression coverage for reads and writes

Co-authored-by: Codex <267193182+codex@users.noreply.github.com>
Signed-off-by: jyxjjj <16695261+jyxjjj@users.noreply.github.com>
ILoveScratch2
ILoveScratch2 previously approved these changes Jul 23, 2026
@xrgzs xrgzs added bug Module: Stream Transmission optimization and file stream handling-related features labels Jul 23, 2026
@PIKACHUIM
PIKACHUIM merged commit e83835d into main Jul 23, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Module: Stream Transmission optimization and file stream handling-related features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] 并发use-after-munmap导致内存溢出

5 participants