kmiya-culti / RLogin

RLoginは、Windows上で動作するターミナルソフトです
http://nanno.bf1.jp/softlib/man/rlogin/
MIT License
463 stars 16 forks source link

起動していないホストへの接続を試みている最中に接続の切断を試みるとアプリが無反応状態に陥る #119

Closed yasuhirokimura closed 4 months ago

yasuhirokimura commented 4 months ago

host1は起動しているがhost2は起動していないという状態でhost1にアクセスしようとして、「ファイル」→「サーバに接続」の一覧でhost1を選んだつもりが誤ってhost2を選択してしまい、SSH鍵のパスフレーズの入力を完了してしばらく待っても何も表示されず接続先を間違えたことに気づく、ということがたまにあります。

それでこの状態の時に、しばらくそのまま放置していればエラーダイアログが表示されて再接続を試みるか尋ねられるので、そこでいいえを選択すれば問題は無いのですが、接続を試みている途中で「ファイル」→「接続を閉じる」を実行するとRLoginのアプリ全体が無反応自体に陥ってしまいます。

そんなことをするのが悪い、おとなしくエラーダイアログが表示されるのを待て、という話なのかもしれませんが、アプリ全体が無反応自体に陥ってしまうのはさすがに不味いと思うので、せめて無反応状態にならないようにしていただけないでしょうか。

よろしくお願いいたします。

kmiya-culti commented 4 months ago

ご報告ありがとうございます。 残念ながら当方でその挙動を確認できませんでしたが思い当たる部分として スレッドの終了時のタイミングでデッドロックが考えられるので対策してみました。 お試しいただければ幸いです

http://nanno.bf1.jp/softlib/rlogin/2.29.1/

yasuhirokimura commented 4 months ago

http://nanno.bf1.jp/softlib/rlogin/2.29.1/

こちらの64bit版のバイナリで試したところ、接続を試みている状態で「ファイル」→「接続を閉じる」を実行 するとすぐに中断されることを確認しました。素早いご対応ありがとうございました。

kmiya-culti commented 4 months ago

お試しありがとうございます。

色々と条件を変えながら試してみると原因がわかりました。 ソケット処理で接続に失敗した場合にブロックしている関数がありスレッドを止めていました メインで終了処理を行うとそのスレッドの終了を単純に待ちデッドロックしているように見えました

気が付き大変助かりました。ありがとうございました。