ThinBridge / Chronos

Chromiumベースの業務ブラウザ
Other
5 stars 3 forks source link

印刷のシステムダイアログを表示後、Chronosがフリーズする #204

Open HashidaTKS opened 1 week ago

HashidaTKS commented 1 week ago

Describe the bug

v14.0.119.1以降で発生。

印刷->詳細設定->システムダイアログを使用して印刷

を選択して印刷のシステムダイアログを表示する。 その後、印刷ボタンやキャンセルボタンを押してダイアログを閉じると、Chronosがフリーズして応答がなくなる。 5分ほどすると続行される。

To Reproduce

Describe the bugに記載の通り。

Expected behavior

Chronosがフリーズしない。

Your Environment

- Chronos version: v14.0.119.1+
- ThinApps version: N/A(無関係。ネイティブのChronosでも発生。)

Your Configuration

N/A

Your TRACE log (Chronos_trace.log)

N/A

Additional context

N/A

HashidaTKS commented 1 week ago

メッセージループの修正前後に発生の境界があるので、メッセージループの改善が契機。

https://github.com/ThinBridge/Chronos/pull/161

事象再現時の動作を確認すると、メッセージのネストが発生していて

https://github.com/ThinBridge/Chronos/blob/master/MessageLoopWorker.cpp#L110

    if (m_bIsActive_)
    {
        // When CefDoMessageLoopWork() is called there may be various callbacks
        // (such as paint and IPC messages) that result in additional calls to this
        // method. If re-entrancy is detected we must repost a request again to the
        // owner thread to ensure that the discarded call is executed in the future.
        m_bReentrancyDetected_ = true;
    }

の部分を通るイベントが延々と繰り返されている。 これは、このケースでは

    if (m_bReentrancyDetected_)
    {
        // Execute the remaining work as soon as possible.
        PostScheduleMessage(0);
    }

でメッセージを送っていて、それが毎回上記の部分を通っているからだと思われる。

HashidaTKS commented 1 week ago

5分程度待つと続行されることから、どこかのタイミングで正しく処理を続行するためのメッセージは送られているのではないか。

HashidaTKS commented 1 week ago

CEF119のサンプルアプリケーションだと印刷しようとすると最初からシステムダイアログが表示される。 印刷プレビューは表示されない。