[ttssh2-dev 32] duplicate session時のワークの受け渡し

アーカイブの一覧に戻る
zmats****@users***** zmats****@users*****
2021年 9月 30日 (木) 23:37:59 JST


松尾です。

Tera Term の duplicate sessionは、
複製先起動時に引数(スイッチ)で状態を渡すほかに、
(この引数作るところがUnicode対応になっていませんでした…対応します)
ワークメモリ(tttset構造体)のコピーも行っているんですね。

複製先 ttermpro.exe を起動する前に、
ワークを共有メモリにコピーしておいて
起動してきたら共有メモリからワークに書き戻しを行う、
という動作です。

Unicodeファイル名対応では
ファイル名やパスを動的メモリ上に取って、
ワーク上にはポインタがあります。

動的にしているのは、32K文字パス長に対応すると、
静的メモリだと効率が悪いためです。

複製先が共有メモリからコピーしたワークの
ファイル名やパスのポインタの指している先は
複製元とは異なるメモリ空間なので
パス、ファイル名が正しく参照できなくなりクラッシュします。

# 多分、
# tttset が共有できるもの、
# TComVar が共有できないもの、
# という設計されているんですね。

ということで、何とか解決しないといけません。
案を考えました。

案1 ワークの受け渡しをやめる
- ワークを受け渡さない
- コマンドラインスイッチで渡せるもので十分
- 必要ならスイッチを増やす
   - 例 /ssh-consume= など(このために存在したのか…)

案2 これまで同様すべてのワークの受け渡しも行う
- ワークはすべてデータに変換できるようにする
- データからワークへ戻せるようにする
- 何らかの方法(共有メモリか、ファイルか)でワークを受け渡す
- 各プラグイン内のワークも受け渡すのか?
   - ttxsshはスイッチで対応している

案3 一部を受け渡す
- スイッチに加え一部のワークを渡す
- どれを渡す?

案1をちゃちゃっと実装して動作を見た感じ、
おおむねよさそうに思いました。

案3(実際1つも受け渡ししない≒1案)で作っておいて、
受け渡す必要があるものがあれば増やしていく
というのが現実的かなとおもいます。

ワーク経由でないければ受け渡せないものはあるでしょうか?
何もなさそうなら案1がシンプルでよさそうです。



ttssh2-dev メーリングリストの案内
アーカイブの一覧に戻る