TOKUNAGA Hiroyuki
tkng****@xem*****
2004年 7月 27日 (火) 12:05:21 JST
On Mon, 26 Jul 2004 15:24:29 +0900 akira yamada / やまだあきら <akira****@arika*****> wrote: > > gktのimmoduleとしてuimを使っていて、 > 変換メソッドをuim-primeにしているときに > 何らかの理由でprimeの起動に失敗すると > アプリケーションが正常に起動してこなくなります。 > その際マシン負荷が上がりっぱなしになります。 > > 再現方法は、primeが使用しているライブラリを削除する、 > あるいは~/.prime以下のファイルを自分以外の持ち物とするなどして > immoduleを使ったアプリケーションを起動します。 報告ありがとうございます。こちらでも再現しました。が、次リリースまでに 修正するのは難しいかもしれません。とりあえずどこまで調べたかを書いておき ます。 調べてみたところ、 (define prime-send-command (lambda (command) (let ((result (prime-lib-send-command command))) (let loop ((res result)) (if (string=? res "") (loop (prime-lib-send-command "")) res ))))) のloopで無限ループに陥っていました。このループは[prime-dev:352] http://lists.sourceforge.jp/mailman/archives/prime-dev/2004-May/000351.html への対策でいれているものです。 しかし、このループを外しても結局アプリケーションを正常に起動させること はできません。デバッガからアプリケーションを実行すると以下のような感じの stack traceが取れる事から、fflushでなにやらまずいことが起きているような 感じです。(スタックが壊れちゃってるみたいなんで、信用していいのかどうか もわかりませんけれども。) Program received signal SIGPIPE, Broken pipe. [Switching to Thread 1082114720 (LWP 2591)] 0x4059af1e in __write_nocancel () from /lib/tls/libc.so.6 (gdb) bt #0 0x4059af1e in __write_nocancel () from /lib/tls/libc.so.6 #1 0x4053b3e9 in _IO_new_file_write () from /lib/tls/libc.so.6 #2 0x4053a60f in new_do_write () from /lib/tls/libc.so.6 #3 0x4053a5a8 in _IO_new_do_write () from /lib/tls/libc.so.6 #4 0x4053ac42 in _IO_new_file_sync () from /lib/tls/libc.so.6 #5 0x4052f059 in fflush () from /lib/tls/libc.so.6 #6 0x41353d9a in uim_ipc_send_command () from /home/tkng/uim-trunk/uim/.libs/libuim.so.0 uim-ipc.cを見ると、uim_ipc_send_commandは(必要ならば)コマンドをオープ ンして、fputsしてfflushしているだけですので、uim側でどういうチェックを入 れれば問題が防げるのかが私にはわかりませんでした。 -- 徳永拓之 tkng****@xem***** http://kodou.net/