lv_task_handler can fail to return in high load scenarios, causing watchdog resets
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 35/100
- issue の種類
- バグ
- 明瞭さ
- 説明が足りない
- 活発さ
- 停滞
調査の方向性
まず、issue に記載されている lv_task_handler と DisplayApp/SystemTask の相互作用を追跡し、その後、より短い LV_DISPLAY_REFR_PERIOD を使って高いアニメーション負荷下でロックアップを再現します。完了条件は、持続的な負荷の下でもタスクハンドラが戻り、メッセージキューが watchdog リセットを引き起こさなくなることです。
索引モデルが issue の本文から書いたものです。
説明
The LVGL task handler re-evaluates higher priority tasks after executing lower priority ones
The animation task is higher priority than refresh tasks
If the animation task or refresh task takes a long time, after executing the refresh task the animation task may be ready again
This causes lv_task_handler to infinitely execute animation->refresh->animation->refresh etc without ever returning
If lv_task_handler doesn't return, the DisplayApp message queue becomes full (usually with touchscreen events) and blocks SystemTask, causing watchdog resets
This happens very rarely or even never in standard InfiniTime. But by either decreasing the LV_DISPLAY_REFR_PERIOD and increasing animation load (e.g animation scroll speed for labels in px/s) (I have not tested if both are required to trigger this behaviour, but I know that both are sufficient), it's possible to reproduce this lockup.
I'd suggest that we replace the LVGL task handler with one that provides a hard upper bound on the number of task executions. Perhaps by only executing each task once and exiting early if it's already spent too long doing work (many tasks waiting)? This would allow task priorities to still be usefully enforced. Lower priority refresh tasks might still get starved by animations though.
Possible cause for #2012 (the notification header scrolling animation)
- 主要言語
- C
- スター
- 3.4k
- フォーク
- 1.1k
- 平均マージ
- 23時間 18分
- マージ済み PR(30日)
- 1
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
InfiniTimeOrg/InfiniTime のほかの issue
-
BLE handlers use length fields from the packet without checking how much data arrived対応中かも @DustinHab が 35 日前に担当しました。 オープン
難易度 4/5 3〜5日 初心者へのやさしさ 56/100
InfiniTimeOrg/InfiniTime#2485 ·
-
Unexpected jump back to watch face when button pressed対応中かも @SteveAmor が 78 日前に担当しました。 オープンbug
難易度 4/5 3〜5日 初心者へのやさしさ 50/100
InfiniTimeOrg/InfiniTime#2461 · コメント 2 件 ·
-
Screen doesn't go to sleep after reset countdown app対応中かも @SteveAmor が 76 日前に担当しました。 オープンbug
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
InfiniTimeOrg/InfiniTime#2419 · コメント 4 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 25/100
InfiniTimeOrg/InfiniTime#2410 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
InfiniTimeOrg/InfiniTime#2407 · コメント 4 件 ·
InfiniTimeOrg/InfiniTime の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
antoxa2584x/nfsu2-sw#44 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
codepointerapp/codepointer#231 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
kubernetes-sigs/security-profiles-operator#3597 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
ImageMagick/ImageMagick#9038 ·
メンテナーはふだん 1 日以内に返信