Skip to content

Prevent task cancellation from propagating to ASH - #628

Merged
TheJulianJES merged 3 commits into
zigpy:devfrom
puddly:puddly/fix-ash-cancellation-bug
Jun 14, 2024
Merged

Prevent task cancellation from propagating to ASH#628
TheJulianJES merged 3 commits into
zigpy:devfrom
puddly:puddly/fix-ash-cancellation-bug

Conversation

@puddly

@puddly puddly commented Jun 13, 2024

Copy link
Copy Markdown
Contributor

Root cause of home-assistant/core#119424.

During device joining, zigpy cancels a scheduled initialization task if the device re-joins during initialization (this is pretty common). Unfortunately, this cancellation propagates all the way down to the ASH sending task, causing the TX sequence number to increment without waiting for an acknowledgement. There is currently a firmware bug with EmberZNet and while ASH can support multiple pending frames at a time, in reality the stack crashes if the number is greater than one 😄.

This fix prevents an ASH send from being cancelled by using asyncio.shield, which schedules it in a task. Incrementing the TX sequence number after a frame has been sent will have similar issues because our last send may not have been ACKed. An alternative to this approach would be to avoid using coroutines entirely for sending and make the ASH protocol implementation rely on event loop callbacks for timeouts.

@codecov

codecov Bot commented Jun 13, 2024

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.72%. Comparing base (09cf7ce) to head (e000846).

Additional details and impacted files
@@           Coverage Diff           @@
##              dev     #628   +/-   ##
=======================================
  Coverage   99.72%   99.72%           
=======================================
  Files          75       75           
  Lines        5002     5016   +14     
=======================================
+ Hits         4988     5002   +14     
  Misses         14       14           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@tube0013

Copy link
Copy Markdown
Contributor

2 hours in this is working well, no more NCP failures.

@TheJulianJES
TheJulianJES merged commit 3657cf3 into zigpy:dev Jun 14, 2024
mineshaftgap pushed a commit to mineshaftgap/bellows that referenced this pull request Jun 11, 2026
* Do not allow task cancellation to propagate to ASH

* Enter a failed state if we cannot send a frame

* Support resolving multiple frames at once (we still limit TX_K=1)
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.

3 participants