Skip to content
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

[DRAFT] [Refactor] Threading cleanup & standardization #535

Draft
wants to merge 2 commits into
base: dev
Choose a base branch
from

Conversation

kdmukai
Copy link
Contributor

@kdmukai kdmukai commented Mar 14, 2024

Description

Light refactors for how we manage child threads and pass data back and forth in a threadsafe manner.

  • Replaces the keep_running check with the more standard threading.Event objects.

    • Child thread loops exit when Event.is_set().
    • Implements thread sleeps as Event.wait(timeout=foo).
  • New ThreadsafeVar[T] generic type class. Some child threads update or return variables that previously had to be stuffed into the ThreadsafeCounter class even if the use case within the thread wasn't actually an int counter (e.g. bools). This was always a bit awkward and made the code difficult to understand ("why is this counter storing 0 and being treated as False"?). The generic typing allows the ThreadsafeVar to be typed and instantiated for a specific basic type (int, str, bool, etc).

  • Extensive tests added to specifically test:

    • The new basic threading utility classes
    • Brute force address verification thread
    • Flow-based test for the address verification flow
    • Light misc refactors to support flow-based test
  • Minor bugfix: Live camera preview can sometimes remain onscreen when LEFT (cancel) is used. This is caused by a race condition between the parent Coordinator thread returning to Home and rendering the screen vs the child live preview thread continuing to do its work before it is successfully killed. This fix explicitly waits for the child thread to exit (thread.join()) before the Coordinator thread can move on.

Misc:

  • Whitespace on tests/test_seed.py changed from tabs to spaces.

Remaining steps

-[ ] Verify SD card inserted/removed toast notifications
-[ ] Expand brute force address verification tests to include all supported address types

Include screenshots of any new or modified screens (or at least explain why they were omitted)

This pull request is categorized as a:

  • Code refactor

Checklist

  • I’ve run pytest and made sure all unit tests pass before sumbitting the PR

If you modified or added functionality/workflow, did you add new unit tests?

  • Yes

I have tested this PR on the following platforms/os:

Note: Keep your changes limited in scope; if you uncover other issues or improvements along the way, ideally submit those as a separate PR. The more complicated the PR the harder to review, test, and merge.

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.

1 participant