[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mhc:01253] Re: 遅いリンクでの mhc-sync
乃村です。
On Mon, 05 Feb 2001 23:30:09 +0900 (JST),
橋 宏彰 <bridge@xxxxxxxxxxxx> said:
> emacsからmhc-syncを使う場合(M-x mhc-file-sync)に、ネットワークが非常に遅
> い場合(ppp - 28800bpsの場合)に失敗します。
>
> 具体的には、ローカル側の.mhc-db-logには転送を行なった記録が残っているに
> も関わらず、リモート側では何も行なった形跡がありません。(syncできていま
> せん)
>
> 同じネットワーク環境でもshellからmhc-syncコマンドを打った時にはうまく行
> きます。
>
> どうも、remote側の処理が終る前にpipeがクローズされているようで、結果とし
> てremote側のプロセスが(何もする前に)killされているようです。
僕の理解では、クライアントが DELIMITER2 を送った後に
明示的に待たなくても、プロセスを終了するときに close が実行されて、
その close を待つので、問題ないと思っていました。
これが正しいとして、emacs の場合にはうまくいかないのは何故なんでしょう。
emacs 上で一見実行が終わっているように見えるけど、
実は終わっていなくて、ユーザはそれに気付かなくて、
そのバッファを殺してしまっているとか。
ステータスが表示されるバッファを殺すとプロセスも死にますから。
<<<transfer finish>>>
というのが出てても、実際は、転送が終わってないのかも。
現状の mhc-sync.el は、process-sentinel がどんなイベントを
受け取っても finish って出すようなので、mhc-sync.el の
mhc-sync/sentinel 部分を以下のように変更して、
process-sentinel が、どういうイベントを受けて終了しているか
観察していただけませんでしょうか。
(defun mhc-sync/sentinel (process event)
(when (bufferp (process-buffer process))
(pop-to-buffer (process-buffer process))
(let ((buffer-read-only nil))
(goto-char (point-max))
(insert (format "got event `%s' from mhc-sync server.\n" event))
(insert "<<<transfer finish>>>")
))
(setq mhc-sync/process nil))
--
nom