[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: start-process
From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp> さん曰く
Subject: [emacs-w3m:00426] start-process
Message-ID: <mpa66gnl6kj.fsf@azalea.kuee.kyoto-u.ac.jp>
Date: 02 Apr 2001 23:28:12 +0900
土> 非同期プロセスの問題は、実は Windows に限ったことではなく、Unix 環境で
土> もかなり簡単に deadlock を引き起こすことが出来るみたいですね。
## ちなみに、Meadow + process + process からの dial-up の問題は
## start-process だけじゃなくて call-process でも起るので、この
## 土屋さんの話とは、また別の話です。^^;;;
土> 例えば、私の環境は Emacs-20.7 + Solaris-2.6 ですが、以下のコードを評価
土> すると90%くらいの確率で見事に固まってしまいます。
土> (with-temp-buffer
土> (let* ((process-connection-type t)
土> (proc (start-process "*w3m*"
土> (current-buffer)
土> "w3m" "-dump_source" "http://namazu.org/")))
土> (message "%d" (process-id proc))
土> (while (eq (process-status proc) 'run)
土> (accept-process-output proc 5))
土> (process-exit-status proc)))
Emacs-21 だと全然固まらないけど、Emacs-20.7 だとあっさり固まりま
すね。Solaris 7。(20.7 な Meadow は大丈夫だけど)
土> というように accept-process-output の引数を変更すると、何故か動くよう
土> になります。
土> ## これは、おそらく Emacs のバグなんでしょうねえ…
かもしれないですね。
土> そこで、以下のように w3m-exec-process を変更しようかと考えているのです
土> が、Windows 環境ではどうなるか調べていただけないでしょうか。特に、
土> accept-process-output の第3引数が有効になるのか否かが気になります。
大丈夫です。動きます。
だけど、
土> (accept-process-output proc 5))
土> (accept-process-output proc 0 200))
この秒数の差で問題が出るなら、sentinel を使った方が良いんじゃ無
いでしょうか?
(defvar w3m-process nil)
(defvar w3m-process-status nil)
(make-variable-buffer-local 'w3m-process)
(make-variable-buffer-local 'w3m-process-status)
(defun w3m-process-sentinel (proc event)
(when (buffer-name (process-buffer proc))
(save-excursion
(set-buffer (process-buffer proc))
(setq w3m-process-status (process-exit-status w3m-process))
(setq w3m-process nil))))
(with-temp-buffer
(let ((process-connection-type t))
(setq w3m-process-status nil)
(setq w3m-process
(start-process "*w3m*"
(current-buffer)
"w3m" "-dump_source" "http://namazu.org/"))
(set-process-sentinel w3m-process 'w3m-process-sentinel)
(message "%d" (process-id w3m-process))
(while w3m-process
(sit-for 0.5)
(discard-input))
w3m-process-status))
な感じ。過去、ちゃんと動いている start-process で sentinel を取
り損なった経験はないと思いましたです。
# しかし、私の XEmacs だと process-connection-type を nil にしな
# いと終りがわからない。。。
ので、お次の話は(いつ書けるかわからないけど)違うメールで。。。
--
白井秀行 (mailto:shirai@rdmg.mgcs.mei.co.jp)