Player::Append blocks thread in wasm
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 30/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- rust, wasm
调研方向
The reporter traces the deadlock to Player::append, which calls sleep_until_end, which blocks on std::sync::mpsc::Receiver::recv. Start by reading that call path and confirming the blocking happens only on the wasm target, where audio runs on the calling thread instead of a separate one. Done means append no longer blocks the single wasm thread, and the clear-then-append sequence from the report completes in a wasm build.
由索引模型根据 Issue 内容生成。
描述
I try to do simple thing:
- Call
Player::clear()to stop current audio track - Immediately after that I call
Player::append()to play new track
if !player.empty() {
player.clear();
}
player.append(sound);
It works fine on linux/windows, but it deadlocks my app thread in WASM.
I have a guess why: inside append there is call to sleep_until_end. sleep_until_end does std::sync::mpsc::Receiver::recv inside of it. And recv blocks calling thread. It causes no issues in linux/windows, because rodio lives in separate thread. But in wasm we have single thread for all things and recv blocks it.
(playing sound on empty Player in WASM works fine)
- 主要语言
- Rust
- 星标
- 2.5k
- 派生
- 338
- 平均合并
- 1 天 3 小时
- 30 天内合并 PR
- 1
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
RustAudio/rodio 的其他 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 74/100
-
难度 1/5 1 小时以内 新手友好度 73/100
-
难度 3/5 1-2 天 新手友好度 62/100
-
WavDecoder::size_hint underflows (u32 wrap, ~4.29e9) after EOF, causes multi-GB Vec::collect() allocation可能已有人在做 @marin-m 于 3 天前认领。 未关闭
难度 3/5 1-2 天 新手友好度 72/100
-
难度 4/5 3-5 天 新手友好度 45/100
相似的 Issue
-
desktop documentation
难度 1/5 1 小时以内 新手友好度 90/100
vfarcic/dot-agent-deck#2008 ·
维护者通常 1 天内回复
-
needs triage
难度 1/5 1 小时以内 新手友好度 85/100
pbakaus/impeccable#1210 ·
维护者通常 1 天内回复
-
enhancement ux-opportunities
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
area: ci priority: P4 ready-for-agent
难度 2/5 1-3 小时 新手友好度 74/100
维护者通常 1 天内回复
-
`PartialEq` for `AssignedBigUint` treats different values as equal可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭status:untriaged
难度 2/5 1-3 小时 新手友好度 78/100
midnightntwrk/midnight-zk#600 ·
维护者通常 2 天内回复