2008/4/19 (土) 14:55:56 ryoji  
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SV1; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 3.5.21022)
[5288] TortoiseSVN 1.5 との併用で発生する問題と対策
TortoiseSVN 1.5.0-beta1 を Vista 環境で使ってみたら sakura で次のような問題が起きました。

1. [同名のC/C++ヘッダ(ソース)を開く]でオープンに成功しても「オープンに失敗」のエラーが表示される

これは、
    [v][タブバーを表示する]
    [v][アイコン表示]
の設定で起きます。

2. タブバーのタブが1個だけのとき[タブを閉じる]で「エディタ間の対話に失敗」のエラーが表示される

これは、
    [v][タブバーを表示する]
    [v][ウィンドウをまとめてグループ化する]
    [v][最後のファイルを閉じたとき(無題)文書を残す]
    [v][アイコン表示]
の設定で起きます。

その他にも問題があるかもしれません。

子プロセスで sakura を起動する際の WaitForInputIdle が、子プロセスが SHGetFileInfo を実行した瞬間に終了してしまうため、こういう現象が起きています。
TSVN 側の問題ではないか?と TSVN のメーリングリストに現象報告して調査してもらったところ、どうやら Windows COM 同期機構が WaitForInputIdle を終わらせてしまっている(別スレッドでアイドリング状態になる?)らしく、TSVN のシェル拡張側としては対策方法が無い、とのこと。
COM 間同期の駆動条件は個別の COM 関数では判別/回避できそうにないので、これはどうしようもないのかな〜、と思います。同じ TSVN でも Vista でのみ起きるというのは、Vista で Shell API 実装が STA から MTA に変更されたから、ということかしら?

いずれにせよ、WaitForInputIdle は COM が絡むと意図どおりには動作しなくなる可能性がありそうなので sakura 側での対策パッチを作成しました。
#WaitForInputIdleがプロセスではなくスレッド指定できれば簡単に回避できるんですけどねぇ〜 (^^;

Patches#1946334
「TortoiseSVN 1.5 との併用で発生する問題と対策」

(参考)
http://www.nabble.com/TSVN-harms-WaitForInputIdle-function-td
16717726.html#a16717726

INCM/CMT
Cyclamen v3.81
[ut:0.010][st:0.000]