Skip to content

FuriHalSerial: Fix RXFNE interrupt hang #4246

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: dev
Choose a base branch
from

Conversation

WillyJL
Copy link
Contributor

@WillyJL WillyJL commented Jul 2, 2025

What's new

  • fixes Flipperzero crashes when GPS is attached to GPIO #4081: FuriHalSerial was unsetting user callback before disabling interrupt, leading to a few clock cycles between which an RXFNE uart interrupt could be triggered without the data being read and thus the flag remaining set, leading to the same interrupt being invoked in loop forever and spending 100% cpu time in interrupt mode, hanging the system
  • made expansion worker stop async rx earlier to avoid more potential issues
  • also made expansion worker wake up on error flags, im guessing it was accidentally not included

Verification

  • enable settings > expansion modules > listen uart and plug a noisy uart module in the relative uart channel
  • this could be a gps module, an esp32 crashing and bootlooping outputting a ton of logs, basically anything that outputs a lot of data on uart
  • flipper should not freeze
  • also, ensure things like vgm and other serial apps work correctly without getting regressions

Checklist (For Reviewer)

  • PR has description of feature/bug or link to Confluence/Jira task
  • Description contains actions to verify feature/bugfix
  • I've built this code, uploaded it to the device and verified feature/bugfix

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.

Flipperzero crashes when GPS is attached to GPIO
1 participant