バグ: 戦闘中の演出をEnterキーなどでスキップしていると低確率でフリーズする

Issue #318 resolved
Liar_cw NA created an issue
cardwirthpy_20160111c
CardWirthPy 0.12.4 Alpha 3 Build: 2016-01-11 22:36:54

発生確率はそれなりに高いわりに再現性が不明(前触れもなく突然発生する)なのですが、 戦闘中にEnterキーやマウスホイール(↓操作)などで演出をスキップしているとフリーズする事がありました。

  • クラシック形式(1.50相当、無圧縮)のシナリオにて確認。1秒ループを無限に繰り返しているような、MIDIや効果音の演奏が詰まったような感じになる。
  • Alt+F4などの操作を受け付けはするが、通常の手段で終了すると完全に操作を受け付けなくなる。プロセスを直接終了させる必要があった。
  • 演出をスキップしない場合については未調査。(おそろしく時間が掛かってしまうため)
  • まだ確信はないものの、cardwirthpy_20160110dでは発生する気配がしない。11日の修正の影響?

原因ですが発生した状況を考えると、どうにも効果音が関係しているように思えます。

  • 交易都市リューンの技能「薙ぎ倒し」を敵キャストが使用した際に、PC6人中3人目を選択した状態でフリーズ。(効果発生前)
  • PC、同行キャスト、敵キャストを問わず行動時に発生した。
  • 死亡イベントで敵キャスト出現と同時に効果音を鳴らしたとき。

繰り返しになりますが再現性がまったくの不明で報告に迷ったのですが、 こちらの環境では発生確率はそれなりに高く、 また、発生したときの深刻さ(あまりPCに強くないユーザにとって)から報告させていただきました。

Comments (8)

  1. k4nagatsuki repo owner

    ご報告ありがとうございます。

    ご指摘の通り、昨日ちょうど音周りを触ったところです。稀な不具合を避けるために入れた同期処理が却って障害になったのかもしれません。こちらで再現しないか調べてみます。

  2. Liar_cw NA reporter
    CardWirthPy_test_20160112a
    CardWirthPy 0.12.4 Alpha 3 Build: 2016-01-12 20:11:37
    

    生命点9999・Lv15の検証用キャスト1体(所有カードなし)とPC6人を戦わせるだけの簡単な検証用シナリオを作成し、累計2500ラウンドほど回してみましたが発生しなくなりました

    • 11c版では、たった114ラウンドで発生。(検証を行う前は、1ラウンド目で発生したこともあった)
  3. k4nagatsuki repo owner

    検証ありがとうございます。珍しく心当たりが当たったようですね(見当がついてないは言い過ぎだった)。

    原因ははっきりとは分からないのですが、おそらく同期処理の問題でしょう(音声の停止やループ処理はゲームの処理とは独立して行う必要があるため、マルチスレッド化する必要があり、そのため同期処理が必要になる)。どこかでデッドロックが発生していたのだと思います。その処理を整理したのが功を奏したようです。

  4. k4nagatsuki repo owner

    pull request #1275で修正をマージし、テスト版をアップロードしました。

    お手数をおかけして申し訳ないのですが、念のため、そちらでもお試しください。

  5. Liar_cw NA reporter
    cardwirthpy_20160112b
    CardWirthPy 0.12.4 Alpha 3
    Build: 2016-01-12 20:57:20
    

    先ほどと同じ条件で2500ラウンドほど回しましたが、 問題は発生しませんでした。

    たしかに原因がはっきりとしないのは少し気持ちが悪いですが、 同期処理(のデッドロック)といえば称号周りでの前例がありましたね……。

  6. k4nagatsuki repo owner

    音声は称号と違ってリアル時間のタイミングの問題があるので、はっきり確信が持てないのが困る所です。

    これで完了とさせていただきますが、また何かあったらお知らせください。ありがとうございました。

  7. Log in to comment