[Anthy-dev 969] Re: [uim] PRIMEの起動に失敗するとアプリケーションが動作しなくなる

Back to archive index

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/



Anthy-dev メーリングリストの案内
Back to archive index