ワークスペース機能で「元に戻す情報」を書きだしている最中に新しいMeryプロセスを立ち上げるとハングアップする
-
3.2.6 リリース、お疲れさまでした。
リリース間もなくで申し訳ない&あまり遭遇する機会は無さそうですが、バグ報告をさせてください。
(以前のバージョンでの検証はできていませんが、おそらく 3.2.6 が契機になっているわけではないと思います)## 環境
OS: Windows 10 Pro 20H2
Mery: 3.2.6## 現象
ワークスペース機能で「元に戻す情報」を書きだしている最中に新しいMeryプロセスを立ち上げるとハングアップする
## 再現手順
1. ワークスペース機能で「ワークスペースを保存、復元する」「元に戻す情報を保持する」をONにする
2. 大量のデータ (1万行~) を入力し、Mery終了処理の Workspace フォルダへの書き出し時間が数秒かかる状態をつくる
3. 2のMery終了処理中に新しいMeryプロセスを立ち上げる上記のような優しくない使い方をすると、新しいMeryのウィンドウは画面に表示されず、プロセスがバックグラウンドに存在するようになります。(タスクマネージャー上にはMeryが表示されている)
また、3までの手順を踏んで画面表示されないMeryプロセスを1つ作ると、以降新たなMeryプロセスを立ち上げるたび、画面表示がされないプロセスが増え続けるようです。| yuko | 返信 -
ご報告ありがとうございます。
> リリース間もなくで申し訳ない&あまり遭遇する機会は無さそうですが、バグ報告をさせてください。
いえいえ。私もひとつ自分でバグを見つけてしまいました。リリース後すぐにバグが見つかるのはあるあるですね。
いただいた条件で現象を再現することができました。
Mery を終了した後にワークスペースの保存はバックグラウンドで行うようにしているのですが、その処理中に新たな Mery のプロセスを起動してしまうと二重起動防止の処理と衝突してワークスペースを保存中のプロセスが終了できなくなってしまっているようです。
対策として、終了時に [ワークスペースを保存しています…] みたいなダイアログを表示してワークスペースの保存が終わるまで Mery を終了させないようにするというのも考えてみたのですが、そんな画面が出てきたらそれはそれで煩わしい気もします。
とりあえず現状の、終了後にこっそりバックグラウンドで保存する仕組みはそのままに、バックグラウンドで保存中は二重起動を鉄壁のディフェンスで防ぐように対策してみたいと思います。
ただ、保存に何秒もかかるような大きなファイルの場合、バックグラウンドでの保存は目に見えないですし、その間、Mery をすぐには起動できないという問題は気になりますが、ハングアップするよりはマシかなと思いますので、一応のハングアップ防止対策ということで。
それで問題が起こるようなら [ワークスペースを保存しています…] 方式も検討してみたいと思います。
| Kuro | 返信 -
Kuroさん
ご確認ありがとうございます。
課題は残るものの、解決の糸口は見つかっているようで何よりです。
> 対策として、終了時に [ワークスペースを保存しています…] みたいなダイアログを表示してワークスペースの保存が終わるまで Mery を終了させないようにするというのも考えてみたのですが、そんな画面が出てきたらそれはそれで煩わしい気もします。
これって例えば、ワークスペース保存処理中に後から起動したMeryプロセスの方でダイアログを出すカタチにはできないでしょうか?
「前回のワークスペースの保存処理中です...」みたいなダイアログを出して起動できるまで待ってもらうイメージです。
意図としては、
- 無言で起動を待ってしまう状態にワンクッション入れたい(これは終了時ダイアログ案と同じ意図ですね)
- 終了時にダイアログを毎回出すよりかは、遭遇する機会は少ない(ワークスペースに保存するのに時間がかかり、かつ終了後即起動をしない限りは遭遇しない)Win アプリのプロセスの扱いを知らずに言っているので無理難題を申していたら、すみませんです……😅
| yuko | 返信 -
ご返信ありがとうございます。
> - 無言で起動を待ってしまう状態にワンクッション入れたい(これは終了時ダイアログ案と同じ意図ですね)
確かに鉄壁ディフェンス案だと、バックグラウンドで保存中に再び Mery を起動しても「起動してこないぞ?」と、無言で待機してしまうシーンがなくもないですね。
> 「前回のワークスペースの保存処理中です...」みたいなダイアログを出して起動できるまで待ってもらうイメージです。
技術的には可能ですが、テキストエディターとしては起動速度は最優先事項ですから起動時に余計なチェックは避けたいところです。
> - 終了時にダイアログを毎回出すよりかは、遭遇する機会は少ない(ワークスペースに保存するのに時間がかかり、かつ終了後即起動をしない限りは遭遇しない)
そうなんですよね。機会が少ないこともあって、バックグラウンド & 鉄壁ディフェンス案を考えてみたのですが、やはりきちんと実装するなら終了時に [ワークスペースを保存しています…] 案でしょうね。
Visual Studio Code でも大きなファイルを閉じると [Waiting for dirty editors to backup...] と右下に進捗ダイアログが表示されて終了を待たされるので、これが正攻法なのだと思います。
(進捗ダイアログと言っても終了までに何秒かかるかは予測できないので、Visual Studio Code みたいに左から右へグルグルとループするだけの進捗バーになりますが…)
正攻法でチャレンジするとしたら、終了時の処理に一定時間 (0.5 秒とか 1 秒) 以上かかる場合は進捗ダイアログ表示、それ未満ならシュっと閉じる。といった仕組みが良いのではないかと思います。
| Kuro | 返信 -
Kuroさん
> 技術的には可能ですが、テキストエディターとしては起動速度は最優先事項ですから起動時に余計なチェックは避けたいところです。
なるほど、それもそうですね。
それを考えれば確かに、複雑な処理は終了時にまとめた方がユーザーとしても嬉しいですね!個人的にも起動速度はMery最大のメリットといえる点の1つだと思っています。> 正攻法でチャレンジするとしたら、終了時の処理に一定時間 (0.5 秒とか 1 秒) 以上かかる場合は進捗ダイアログ表示、それ未満ならシュっと閉じる。といった仕組みが良いのではないかと思います。
なるほど、毎回出すのではなく、ある程度の時間がかかる場合に出すのですね。(ミリ秒単位の終了でさえダイアログを描画しては、そっちの方が時間掛かりそうですしね)
想像してみて、スマートだなぁと思いました。ハングアップさえ防いでしまえば優先度は下がると思いますが、搭載するならその方式に賛成票を投じておきます!| yuko | 返信