XP環境でシナリオを保存せずに終了しようとすると強制終了することがある
閉じてから一瞬、間があり、そこからさらに一瞬砂時計が出て強制終了メッセージが表示されます。 RC5で確認しましたが、どうも前回の報告以前からのような気もします。
Application Data\cwxeditorにエラーログは生成されてないようです。
オプションで下記設定をそれぞれ外してみると、心持ち頻度が下がったような気もしましたが、やはり出るときは出ます。
「保存前にダイアログの編集内容を適用」「自動バックアップ」「保存時にバックアップコピー」「分割読込・保存」「保存時の圧縮を別スレッドで行なう」「シナリオごとにタブの位置を記録」
Comments (17)
-
repo owner -
repo owner できることからということで終了時処理中に1行ずつエラーログを吐くようなコードを仕込んだテスト版を作成してみました。
正常に終了した時は最後に次のようなエラーログが出ます。
2015-06-28 20:36:32 [Build: 2015-06-28 20:35:24 Debug / Console (32-bit)] cwx\editor\gui\dwt\mainwindow.d:4452 4452 2015-06-28 20:36:32 [Build: 2015-06-28 20:35:24 Debug / Console (32-bit)] cwx\editor\gui\dwt\mainwindow.d:4455 4455 : : 2015-06-28 20:36:33 [Build: 2015-06-28 20:35:24 Debug / Console (32-bit)] cwx\editor\gui\dwt\mainwindow.d:4520 4520 2015-06-28 20:36:33 [Build: 2015-06-28 20:35:24 Debug / Console (32-bit)] cwx\editor\gui\dwt\mainwindow.d:4523 4523
逆にどこかで処理が止まった場合はログが途中で切れるはずです。
これを使ってどこで止まっているか確認していただけないでしょうか。
-
reporter - attached cwxeditor_error.log
あ、エラーログも。
-
repo owner あれ、ログが最後まで出ていますね。ということは終了まで行っているわけで奇妙です。
そうなると怪しい点はファイル・フォルダの更新確認機能と外部DLL周りです。次のオプションを変更して発生するか見ていただけないでしょうか。
- 設定→その他→ファイルの追跡→「ファイル・フォルダの変更を自動的に追跡する」をOFF
- その他→BGM再生方式を「WinMM」や「関連付けされたアプリケーションで開く」にする
-
reporter 「ファイル・フォルダの変更を自動的に追跡する」をOFF→二度目で発生。
BGM再生方式→自動選択からWinMMにしてOKを押した瞬間強制終了。効果音再生形式もWinMMにすると10数回開き直しても発生せず。
効果音再生形式のみ自動選択に戻す→4度目で発生。
まだ試行回数が少ないですが、このオプションっぽいですね。
-
repo owner そうなるとたぶんSDL_mixerの問題ですね。回避するにはどうしたものか……。
ご迷惑をおかけしますが、少しどうするか検討させてください。WinMMの設定から変更しなければ当面は回避可能だと思います。
-
reporter 了解しました。元々ニッチな環境ですのでおきになさらず。対処法がわかっただけ幸いです。
それとPyの方は昨日の更新から今のところ一度も強制終了せず安定しております。
-
repo owner ありがとうございます。とりあえずCWPyの方は見つかった問題は一掃されたと考えてよさそうな感じですね。
さて、SDLは最近バージョン2がリリースされたのですが、インタフェースが変わるのでcwxeditor(32bit)ではあえてSDL1から更新せずにいました。もしかするとSDL2では問題が解決されているかもしれないので、SDL2を使用するテスト版を作ってみました。これで問題が発生するか試していただけないでしょうか。
-
reporter テスト版で上書きし自動選択に戻してやってみたところ、四回目で強制終了しました。 ただ、自動選択ではなくSDLを指定してみたところ、20回程度試して強制終了しないっぽいので、 もしかすると、自動選択側の問題なのかもしれません…?
-
repo owner 検証ありがとうございます。
もしかするとSDLではなくBASS Audioの問題かもしれません。cwxeditor自体にはライセンス的な問題でbass.dllやbassmidi.dllといったBASS Audio関係のDLLを入れていないのですが、CW1.50でBASS Audioを使うように設定されている場合には、例外的にエンジン同梱のDLLを使用して演奏を行うようにしています。エディタ終了時やSDLに切り替えた時にBASSのDLLは解放されるのですが、その解放処理でエラーが出ているということは考えられます。
シナリオの編集において1.50エンジンを使用していない場合はこの可能性は無くなりますが、その辺りはどうでしょうか。また、もし使用しているとしたら、例えば1.50同梱のbass.dllをリネームなどして読み込まれないようにするとエラーが発生しないということはないでしょうか。
-
reporter なるほど、たしかに1.50を指定していました。 実はCドライブに1.50、Dドライブに1.30を置いていたのですが、どうやらxeditorは両方を自動検知してくれているようですね。(未知のクラシックエンジンオプション?)
まずはじめに1.50のBASS.dll、bassmidi.dllをリネームしたところ強制終了が確認されたので、 もしやと思い1.30のBASS.dll、bassmidi.dllもリネームしたところ強制終了しなくなりました。
-
repo owner 検証ありがとうございます。
エンジンの検知については、シナリオを開いた時にそのシナリオの上位フォルダにあるエンジンを探しに行くので、たぶんそれで認識したのでしょう。
しかしやはりBASS AudioとSDL mixerの競合問題でしたか。実は以前別の方の環境上のCWPyで同じような問題が発生していて、それは一度でもSDL mixerを初期化していると、それを解放してもBASS Audioの方で不具合が出るという問題だったと思います。そうなると解決が難しそうです。
とりあえず2種類の音声ライブラリを同時に使用しないように工夫して解決できないか試みることにします。申し訳ないのですが、たぶん明日になると思います……。
-
reporter あ、リリース用Issueに書かれていましたね。あちらはWin7ということでどうやらOS依存ではなかったのですね。よかった(笑)
いえいえ。今日はPyの方の更新もありましたし、本当にお疲れさまでした。
-
repo owner お待たせしました。異なる再生方式を同時に使用しないようにしてみました。お手数をお掛けしますがテスト版をお試しください。
CWPyの事例では一度でもSDL_mixerを初期化していると解放してもBASS Audioが使えなくなるという問題が残りましたが、エディタの方はどうなるか分かりません。
少なくとも、使用する再生方式が途中で切り替わらなければ終了時にエラーが出る事はなくなるはずです。
-
reporter 見事に出なくなってます!
旧テスト版やRC5版でも出なくなったのでアレ?と思ったのですが、 「未知のクラシックエンジンを見つけたら記憶する」にチェックが入っていなかったことが原因だったようです。 チェックを入れたら旧テスト版やRC5版は強制終了が出るようになり、 そこから新テスト版で更に30回ほど試しましたが新テスト版では一度も強制終了しませんでした。 初期化がどのタイミングで起こるのかいまいちわからないですが、midiの方も今のところ問題なく再生できている感じです。
-
repo owner ご確認ありがとうございます。とりあえず今のところ問題が発生していないようなので、この対策で行ってみます。
なお、初期化は、使用するエンジンが変わった時(シナリオオープン時や概略ダイアログで使用するエンジンを替えた時)や設定で再生方式を変えて、次の音声再生が行われた時に発生します。CWPyの例を考えるとちょっと怖いところです。
-
reporter - changed status to resolved
今さらですが、解決ボタンを押し忘れていたので…。 改めてありがとうございました。
- Log in to comment
ご迷惑をお掛けして申し訳ありません。ちょっと手許で再現しないか試してみます。XPマシンがすぐ触れるところにないのでしばらくお待ちください……。