Skip to content

fix: wake RFCOMM reader when receive queue has space - #18

Merged
fython merged 1 commit into
fython:mainfrom
xiwangly2:fix/rfcomm-receive-backpressure
Oct 16, 2026
Merged

fython merged 1 commit into
fython:mainfrom
xiwangly2:fix/rfcomm-receive-backpressure

Conversation

@xiwangly2

@xiwangly2 xiwangly2 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

RFCOMM 接收队列达到 64 KiB 后,读取线程会等待可用空间,但 takePendingLocked() 消费数据后没有通知它。即使队列已排空,后续 recv() 仍可能持续超时。

本次在消费释放空间后调用 lock.notifyAll(),覆盖整块读取和部分读取两条路径。队列修改仍在同一把锁内完成,读取线程重新取得锁后再检查容量和关闭状态。

新增 shared 模块的 Robolectric 回归测试,仅替换 Android BluetoothSocket 边界,运行真实队列和读取线程:

  • 满队列后消费整块,确认继续读取且字节顺序完整。
  • 满队列后只消费 1 字节,确认继续读取并保留剩余数据。
  • 关闭正在等待队列空间的读取线程,确认退出且 socket 只关闭一次。

验证(基于最新 main 39485f9):

  • 缺少通知时,两个恢复读取用例失败;加入通知后,三个回归用例全部通过。
  • :shared:testDebugUnitTest:422 项通过,无失败或跳过。
  • :mobile:lintDebug、:mobile:assembleDebug 和 git diff --check 通过。
  • Windows 上的完整 common 回归受现有 POSIX 文件权限检查及 sh 依赖限制;两类代表用例已在不含此修复的源码上复现。完整 common 覆盖请结合 Linux CI 结果。

已在萤火虫车机验证;上述结果验证的是实际实现的 JVM 队列与线程路径。

@xiwangly2
xiwangly2 marked this pull request as ready for review October 15, 2026 04:19
@fython
fython merged commit 41e7f11 into fython:main Oct 16, 2026
1 check passed
@fython

fython commented Oct 16, 2026

Copy link
Copy Markdown
Owner

Thanks for contribution!

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