DVK canceled callbacks and upload timer can corrupt replacement transfers
@rfoust is already working on this.
Since Sep 13, 2026.
Assessment
This issue has not been assessed yet.
Description
Canceling a DVK WAV transfer and starting another before deferred work arrives lets the canceled operation mutate the replacement. This is a P1 crash/cross-transfer bug confirmed by source tracing at upstream/main 87b80c65d; deterministic reproduction and regression coverage are being prepared.
Public source: https://github.com/aethersdr/AetherSDR/blob/main/src/core/DvkWavTransfer.cpp
Both command callbacks capture raw this. The port handlers reject only m_cancelled, which both start methods reset. A reply from canceled operation A is therefore admitted during operation B, including a different transfer direction. It can create/truncate B's output or finish/clean up B on an old error. Callbacks also outlive the transfer object if the model retains them.
The upload reply schedules a 200 ms lambda that likewise only checks m_cancelled before dereferencing m_client. Cancel A, start B while awaiting its reply, and A's timer dereferences the cleared client. If B already has a client, A can connect it to A's old port.
Proposed narrow fix: operation identity plus expected-phase checks for command replies and delayed connection, weak QObject lifetime checks, and captured socket identity. Preserve existing wire commands and WAV format. Add socket-free cancel/restart regressions in both directions, including same-direction replacements and mutations that remove each guard. No live radio writes or TX are needed to prove stale-work rejection.
Related: #2501 / #3309 fixed duplicate socket completion and teardown reentry, not deferred work crossing transfers. #5634 / #5638 address the analogous ProfileTransfer lifecycle independently.
Generated with OpenAI Codex.
- Dominant language
- C++
- Stars
- 221
- Forks
- 117
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 299
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from aethersdr/AetherSDR
-
audio documentation good first issue maintainer-review
Difficulty 1/5 Under an hour Newbie friendliness 92/100
-
bug CW maintainer-review safety
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
-
docs(agents): family PRs must stay in the family tree (shared applet/pan/model edits stall review) Opendocumentation enhancement maintainer-review
Difficulty 1/5 1-3 hours Newbie friendliness 90/100
-
bug good first issue GUI maintainer-review priority: low
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
bug
Difficulty 1/5 Under an hour Newbie friendliness 86/100
All issues in aethersdr/AetherSDR
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
Sensor initialization takes very long when `--initial-sim-time` is set to current UNIX timestamp Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
gazebosim/gz-sensors#662 · 1 comment ·
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
-
comp-datalake
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
ClickHouse/ClickHouse#121222 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
LadybirdBrowser/ladybird#12123 ·