[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