[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

asynchronous process



[emacs-w3m:05481] の問題を解決するために,[emacs-w3m:04005] を真面目に
考えてみました.

現行の w3m-proc.el の実装は,asynchronous process を再帰的に生成するよ
うな関数を w3m-process-with-wait-handler() で終了待ちすることが出来な
いという問題を抱えています.これは,w3m-process-with-wait-handler() が
最初に生成された非同期プロセスしか考慮していないことによる制限です.

確実に終了待ちをするためには,w3m-process-with-wait-handler() によって
作成された handler を見つけることが必要になります.

現実装では,作成された handler は,動的に生成される別の handler の中に
組み込まれてしまうため,簡単に見つけることは出来ません.作成された 
w3m-process object に登録されている最後の handler を使えばいいだろうか
と考えたのですが,w3m-process-with-wait-handler() の body の評価中に 
context switch が発生しないことを保証できないので,確実ではありません
(99% 大丈夫なんですけどねえ).

仕方がないので,従来は単なる関数だった handler を,関数のリストとして
持つことにして,自身の handler を見つけ出すことが出来るように変更しま
した.

これによって,w3m-follow-redirection が設定されていても redirect も非
同期に処理されるようになりました.

ただし,あまりにも危険な変更なので,作業は experimental-async 枝で行っ
ています.地雷を踏みたい,あるいは,デバッグしたくて仕方がない,という
ような人は試してみてください.

なお,既知の不具合として antenna が動かなくなっています.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )